Java의 null 및 빈 문자열
이 튜토리얼에서는 Java에서 null
과 빈 문자열의 차이점에 대해 설명합니다. 그러나 그 전에 empty
와 null
용어의 기본적인 차이점을 이해할 것입니다.
‘비어 있음’은 필요에 따라 채우거나 필요한 작업을 수행할 수 있는 빈 상자와 같습니다.
‘Null’은 관련된 속성이 있는 진공과 같기 때문에 비어 있거나 가득 찬 것으로 간주할 수 없습니다.
Java에서 문자열은 문자 시퀀스를 나타냅니다. 예를 들어 delftstack
은 문자열입니다.
Java에서 빈 문자열과 null 문자열을 자주 봅니다. 많은 사람들은 빈 문자열과 null 문자열이 모두 같다고 생각하지만 null 문자열과 빈 문자열에는 차이가 있습니다.
Java에서 빈 문자열 사용
String a = ""; // empty string
여기서 a
는 빈 문자열입니다. string
변수에 빈 문자열을 할당하면 reference
변수가 힙에 있는 문자열의 메모리 위치를 참조한다는 것을 나타냅니다.
빈 문자열은 문자가 없는 문자열이며 길이가 length is 0
으로 잘 정의되어 있습니다. 빈 문자열에 대해 모든 문자열 작업을 수행할 수 있습니다.
length()
메서드를 사용하거나 일부 문자의 인덱스를 찾는 등의 방법으로 길이를 찾을 수 있습니다.
Java에서 Null 문자열 사용
String b = null;
여기서 b
는 null 문자열입니다. 문자열 변수에 null을 할당할 때 참조 변수는 힙의 메모리 위치를 참조하지 않습니다.
null 문자열은 문자열이 전혀 없음을 의미합니다. 문자열이 아니기 때문에 길이가 없습니다.
null 문자열에 표준 문자열 작업을 적용하면 NullPointerException
런타임이 발생합니다.
Java의 null 및 빈 문자열 예
이 예에서 우리는 빈 문자열과 null 문자열을 만든 다음 length()
메서드로 작업을 확인했습니다. null 문자열은 예외를 throw하지만 빈 문자열은 예외를 throw하지 않습니다.
아래 예를 참조하십시오.
public class SimpleTesting {
public static void main(String[] args) {
// empty string
String a = "";
// null string
String b = null;
// printing length of empty string
System.out.println("length a = " + a.length());
// this piece of code will still throw nullpointerexception .*
if (b != "") {
// printing length of null string
System.out.println("length b =" + b.length());
}
}
}
출력:
length a = 0
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.length()" because "<local2>" is null
at SimpleTesting.main(SimpleTesting.java:15)
Java에서 equals()
메소드를 사용하여 Null 및 빈 문자열 확인
이 예제에서는 equals()
메서드와 equal ==
연산자를 사용하여 빈 문자열과 null 문자열을 확인했습니다. ""
와 null
은 메모리에서 동일한 공간을 차지하지 않기 때문에 표현식 a==b
는 false
를 반환합니다.
간단히 말해서 변수가 동일한 객체를 가리키지 않는다고 말할 수 있습니다. a.equals(b)
는 a
와 b
가 가리키는 객체 참조 값이 일치하지 않기 때문에 false
를 반환합니다.
b.equal(a)
는 b
가 모호한 참조를 가리키고 작업이 허용되지 않기 때문에 NullPointerException
을 반환합니다.
public class SimpleTesting {
public static void main(String[] args) {
// empty string
String a = "";
// null string
String b = null;
System.out.println(a == b);
System.out.println(a.equals(b));
System.out.println(b.equals(a));
}
}
출력:
false
false
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "<local2>" is null
at SimpleTesting.main(SimpleTesting.java:13)