null과 빈("") Java 문자열의 차이
null
및""
(어느 쪽인가?)
간단한 코드를 작성했습니다.
String a = "";
String b = null;
System.out.println(a == b); // false
System.out.println(a.equals(b)); // false
은 모두 반환됩니다.false
실제 어떤 차이가 있는지 알 수 없는 것 같습니다.
null 문자열과 빈 문자열의 차이도 다음과 같이 이해할 수 있습니다.
"는 실제 문자열이지만 빈 문자열입니다.
그러나 null은 String 변수가 아무것도 가리키지 않음을 의미합니다.
a==b
"와 null은 메모리에서 같은 공간을 차지하지 않기 때문에 false를 반환합니다.즉, 변수는 같은 개체를 가리키지 않습니다.
a.equals(b)
거짓이다
차이점은 " "는 실제 문자열이기 때문에 다음과 같이 메서드나 함수를 호출할 수 있다는 것입니다.
a.length()
a.substring(0, 1)
기타 등등.
b와 null일 는 string b를 .NullPointerException
적이 과 같이.
b.length()
==와 동등한 ==의 차이가 궁금하다면 다음과 같습니다.
==는 참조를 비교합니다(예: 내가 갔을 때)
String a = new String("");
String b = new String("");
System.out.println(a==b);
두 개의 다른 개체를 할당하고 a와 b가 다른 개체를 가리키기 때문에 false로 출력됩니다.
★★★★★★★★★★★★★★.a.equals(b)
됩니다. , 이 경우, 사실로 반환됩니다. 왜냐하면equals
for Strings는 인수 String이 늘이 아닌 동일한 문자 시퀀스를 나타내는 경우에만 true를 반환합니다.
단, Java에는 Strings에 대한 특별한 케이스가 있습니다.
String a = "abc";
String b = "abc";
System.out.println(a==b);
은 '하다, 하다, 하다'라고예요.false
2개의 다른 스트링을 할당해야 하기 때문입니다.실제로 Java는 리터럴 문자열(이 예에서는 a 및 b와 같이 초기화됨)을 internal 합니다.따라서 ==의 작동 방식에 대해 잘못된 긍정 결과가 나올 수 있으므로 주의해야 합니다.
문자열은 개체이며 null일 수 있습니다.
null은 String 객체가 인스턴스화되지 않았음을 의미합니다.
" "는 "aaa"와 같은 인스턴스화된 개체 문자열의 실제 값입니다.
다음 링크에서는 이 점을 명확히 할 수 있습니다.http://download.oracle.com/javase/tutorial/java/concepts/object.html
당신의 진술이 말하는 것은 "는 늘과 같지 않다는 것입니다. 이는 사실입니다."는 빈 문자열입니다.null은 값이 할당되지 않았음을 의미합니다.
다음을 시도해 보는 것이 더 도움이 될 수 있습니다.
System.out.println(a.length()); // 0
System.out.println(b.length()); // error; b is not an object
"는 여전히 문자열입니다. 즉, 메서드를 호출하여 의미 있는 정보를 얻을 수 있습니다.null은 빈 변수입니다.말 그대로 아무것도 없습니다.
그 둘 사이에는 상당한 차이가 있다. 문자열 " " """
」라고 이야기합니다길이가 잘 정의된 실제 문자열입니다.모든 표준 문자열 연산은 빈 문자열에 제대로 정의되어 있습니다. 이 연산을 소문자로 변환하거나 일부 문자의 색인을 검색할 수 있습니다. 문자열 " " "null
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ 늘이 합니다.NullPointerException
행행시 。
(여기서)a is an Object
b(null)
개체가 아닙니다. 늘 참조입니다.
System.out.println(a instanceof Object); // true
System.out.println(b instanceof Object); // false
여기 나의 비슷한 답변이 있다.
null은 이름이 인스턴스화된 개체를 참조하지 않음을 의미합니다."는 빈 문자열을 의미합니다.
여기서 a는 빈 문자열인 개체를 참조하고 있습니다.b는 null이므로 개체를 참조하고 있지 않습니다.
에 할당된 입니다.null
전혀 가치가 없습니다.할당된 문자열""
에는 빈 문자열이 있습니다.즉, 문자가 없는 문자열을 말합니다.가 되어 있는 null
즉, 어떤 종류의, 문자열이나 그 밖의 어떤 종류의 기본 객체도 존재하지 않습니다.
"와 null은 둘 다 다릅니다.첫 번째 값은 문자열 변수 선언의 일부로 문자열 상수가 문자열 풀에 생성되고 동일한 메모리에 할당되었음을 의미합니다.
그러나 null로 선언하면 jvm은 인스턴스화되었을 뿐이지만 메모리가 할당되어 있지 않습니다.따라서 " - blank variable"로 체크하여 이 오브젝트에 액세스하려고 하면 nullpointexception을 방지할 수 없습니다.다음의 사용 사례를 참조하십시오.
public class StringCheck {
public static void main(String[] args) {
// TODO Auto-generated method stub
String s1 = "siddhartha";
String s2 = "";
String s3 = null;
System.out.println("length s1 ="+s1.length());
System.out.println("length s2 ="+s2.length());
//this piece of code will still throw nullpointerexception .
if(s3 != ""){
System.out.println("length s3 ="+s3.length());
}
}
}
String s = "";
s.length();
String s = null;
s.length();
문자열 " " " """
는 힙 내의 개체를 가리키므로 해당 개체의 메서드를 호출할 수 있습니다.
, ★★★★★★★★★★★★★★★★★★★★★★★★★null
에는, 하는 「」라고 것이 표시됩니다.NullPointerException
.
이 이미지는 차이를 이해하는 데 도움이 될 수 있습니다.
빈 문자열은 객체 지향 프로그래밍 언어에서 문자열 유형에 대한 null 참조가 문자열 개체를 가리키지 않고 문자열에서 작업을 수행하려고 하면 오류가 발생한다는 점에서 null 참조와 구별됩니다.빈 문자열은 여전히 문자열 연산을 시도할 수 있는 문자열입니다.
String s=null;
문자열이 null에 대해 초기화되지 않았습니다. 문자열 작업을 시도하면 null 포인터 예외가 발생할 수 있습니다.
String t="null";
이것은 t = "xyz"와 같은 값 문자열 "filen"을 가진 문자열 리터럴입니다.null 포인터는 던지지 않습니다.
String u="";
빈 문자열입니다.늘 포인터를 던지지 않습니다.
둘 있고 "" " " " " 를 수도 .null
이 ". "인 null
기억 속의 어떤 것도 가리키는 것이 아닙니다.★★를 해 보세요.s.length()>0
이는 문자열이 비어 있는 경우에도 0의 길이를 반환하기 때문입니다. 같은하지 않은 됩니다.null
반면 길이를 확인하면 루프를 벗어나게 됩니다.
이 노래의 주인공입니다.계산기(예: 7/0)를 사용하여 숫자(0이 아님)를 0으로 나누어 본 적이 있습니까?예요.undefined
,not a number
,null
기타. 어떤 이유로 작업이 불가능하다는 것을 의미합니다(이러한 이유는 차일피일 미루자).
다음 절차를 수행합니다: 0/7출력 0이 표시됩니다.즉, 연산이 가능하고 실행할 수 있지만 분할 후에는 아무것도 남지 않기 때문에 정답은 0입니다.유효한 출력이 있으며 그 출력은 0입니다.
첫 번째 예에서는 출력이 무효일 뿐만 아니라 조작을 실행할 수 없었습니다.은 '아주 좋다'와.null
javacring으로 합니다.두 번째 예는 다음과 같습니다.empty
스트링
글을 쓸 때
String a = "";
, 문자열 a'가 하며, " "는 ", "는 "가 . variable As 수수 asa
는 유효한 문자열 오브젝트 참조를 보유하고 있습니다.여기서 모든 문자열 메서드를 적용할 수 있습니다.
반면에 당신이 글을 쓸 때
String b = null;
입니다.b
알 수 없는 참조를 가리키는 문자열 형식입니다.그리고 알 수 없는 참조에 대한 어떠한 작업도NullPointerException
.
이제 다음 식을 평가해 보겠습니다.
System.out.println(a == b); // false. because a and b both points to different object reference
System.out.println(a.equals(b)); // false, because the values at object reference pointed by a and b do not match.
System.out.println(b.equals(a)); // NullPointerException, because b is pointing to unknown reference and no operation is allowed
간단히 말하면
"는 빈 문자열입니다.
null은 빈 문자열 변수입니다.
늘 문자열과 빈 문자열의 차이입니다.예를 들어, x라는 이름의 변수가 있습니다.JS로 쓰면
var x = "";
즉, 빈 문자열(길이는 0)의 값이 할당되어 있는 것을 의미합니다.사실 이건 아무것도 아닌 것 같은데:) 반면에,
var y = null;
즉, 선언 시 null을 y로 적음으로써 명확하게 언급된 값을 y에 할당하지 않았습니다.y.length라고 쓰면 y에 할당된 값이 없고 결과적으로 y 길이를 읽을 수 없음을 나타내는 오류가 발생합니다.
"저는 이것을 10억 달러짜리 실수라고 부릅니다.그것은 1965년에 null reference가 발명된 것이다." - https://en.wikipedia.org/wiki/Tony_Hoare
현실 세계와 관련하여 둘 다 같은 것으로 가정할 수 있다.이는 프로그래밍 언어의 구문일 뿐이며, 여기서 설명하는 것과 같이 두 언어의 차이를 만듭니다.이것은 단순히 문자열 변수가 무엇인가를 가지고 있는지 확인/비교할 때 먼저 null이 아닌지를 확인한 후 실제 문자열을 비교해야 하는 것과 같은 오버헤드를 생성합니다.이것은 모든 문자열 비교에 대한 처리 능력을 낭비하는 것입니다.
Objects.equals()는 .equals()를 호출하기 전에 늘을 확인합니다.
신기하게도
String s1 = null;
String s2 = "hello";
s1 = s1 + s2;
System.out.println((s); // nullhello
null
하지만 빈 은 "" 을 ""으로설정했음을 합니다.변수 값을 설정하지 않았음을 의미하지만 빈 값은 "" 값을 자신의 값으로 설정했음을 의미합니다.String
예를 들어, 다음의 예를 참조해 주세요.
String str1;
String str2 = "";
서 ★★★★str1
null
, 아직, 정의되어 .str2
하여 그 어울릴 수 없습니다."가 되도록 합니다.
그렇지만
훌륭한 답변이지만 다른 관점에서 말씀드리겠습니다.
String a = "StackOverflow";
String a1 = "StackOverflow" + "";
String a2 = "StackOverflow" + null;
System.out.println(a == a1); // true
System.out.println(a == a2); // false
이를 통해 "와 null이 다른 오브젝트 참조를 가리킬 수 있습니다.
언급URL : https://stackoverflow.com/questions/4802015/difference-between-null-and-empty-java-string
'programing' 카테고리의 다른 글
C/C++ 소스 코드를 코딩 표준과 대조하여 검사하는 무료 툴? (0) | 2022.08.24 |
---|---|
컴포넌트 및 Axios 내에서 데이터를 사용하는 경우 어떻게 데이터를 작동시키려면 어떻게 해야 합니까? (0) | 2022.08.24 |
Java에서 변수 인수를 사용하는 메서드에 배열을 인수로 전달할 수 있습니까? (0) | 2022.08.21 |
C의 printf 함수 코드 (0) | 2022.08.21 |
y -= m < 3은 무엇을 의미합니까? (0) | 2022.08.21 |