2009-10-29 5 views

답변

7

새 char [0]을 할당하면 문자열이 null이 아닙니다. 그것은 비어 있습니다.

당신은 할 수 : .NET에 적어도 놀라움의 원칙을 위반

Console.WriteLine(string.IsNullOrEmpty(x)); 
5

x이 빈 문자열, x = ""와 동일합니다 검사 할 때.

null""은 두 개의 별개의 문자열 값입니다. 특히 null은 null 참조이므로 인스턴스 구성원을 호출 할 수 없습니다. 따라서 x이 null이면 x.LengthNullReferenceException을 던집니다.

대조적으로 "" (또는 String.Empty)은 0자를 포함하는 일반적인 문자열입니다. 해당 인스턴스 구성원은 정상적으로 작동하며 은 0과 같습니다.

문자열이 null이거나 비어 있는지 확인하려면 String.IsNullOrEmpty (놀라운)을 호출하십시오.

3

문자열이 null이 아니며 비어 있습니다.

Console.WriteLine(x.CompareTo(String.Empty)==0); 
4

당신은 여기에 흥미로운 사건을 포착했습니다. 때마다 당신은

string x = new string(new char[0]); 

당신이 같은 문자열에 대한 참조를 얻을 것이다 실행합니다.

(편집 :.. 그냥 이것에 대해 매우 명확합니다 - 그것은 null 이외의 참조입니다 그것은 단지 당신이 생성자의 다른 양식을 사용하거나 문자열 리터럴을 사용하는 경우처럼 문자열을 의미)

내가 그것을 는 ""하지만 지금은 같은 하나가 나타납니다하기 위해 다른 문자열을 참조하는을 사용 확신 : 지금까지 내가 알고 있어요으로

using System; 

public class Test 
{ 
    static void Main() 
    { 
     object x = new string(new char[0]); 
     object y = new string(new char[0]); 
     object z = ""; 
     Console.WriteLine(x == y); // True 
     Console.WriteLine(x == z); // True 
    } 
} 

, 이것은 단지 입니다 클래스에 대해 new을 호출하면 기존 객체에 대한 참조를 반환 할 수 있습니다.

+0

을이 흥미로운 점이지만, 질문 함께 할 아무것도있다. – SLaks

+0

@Slaks : 나는 그것이 그 질문과 아무 관련이 없다는 것을 알지 못합니다. 특히 그것은 문자열에 대한 참조이므로 null이 아닙니다. 나는 매번 동일한 참조를 받는다는 사실이 그 질문에 완전히 관련되어 있다고 생각합니다. –

+0

위와 같이 인스턴스화 된 두 개의 문자열이 동일한 주소를 가질 것이라고 말하는 것과 동일합니까? –

0

대신을 시도해보십시오

Console.WriteLine(x.CompareTo(string.Empty) == 0); 
관련 문제