1. 소개
Java String 은 가장 중요한 클래스 중 하나이며 String 관련 튜토리얼 시리즈 에서 이미 많은 측면을 다루었습니다 .
이 튜토리얼에서는 Java의 문자열 초기화에 중점을 둘 것 입니다.
2. 창조
우선 Java에서 String 이 생성되는 방식을 기억해야합니다 .
new 키워드 또는 리터럴 구문을 사용할 수 있습니다 .
String usingNew = new String("baeldung"); String usingLiteral = "baeldung";
또한 특수한 풀에서 String 을 관리 하는 방법을 이해하는 것도 중요합니다 .
3. 문자열 선언 만
먼저 값을 명시 적으로 할당하지 않고 String을 선언 해 보겠습니다 .
이 작업을 로컬로 수행하거나 멤버 변수로 수행 할 수 있습니다.
public class StringInitialization { String fieldString; void printDeclaredOnlyString() { String localVarString; // System.out.println(localVarString); -> compilation error System.out.println(fieldString); } }
보시다시피 값을 제공하기 전에 localVarString 을 사용하려고 하면 컴파일 오류가 발생합니다. 반면에 콘솔은 fieldString 값에 대해 " null" 을 표시 합니다.
참조, 멤버 변수는 클래스가 생성 될 때 기본값으로 초기화 되며 String 의 경우 null 입니다 . 그러나 우리는 지역 변수를 직접 초기화해야합니다.
우리가 주면 localVarString 의 값이 널 (null)을 , 우리는이 지금과 동일, 실제로있는 것을 볼 수 있습니다 :
String localVarString = null; assertEquals(fieldString, localVarString);
4. 리터럴을 사용한 문자열 초기화
이제 동일한 리터럴을 사용하여 두 개의 String을 생성 해 보겠습니다 .
String literalOne = "Baeldung"; String literalTwo = "Baeldung";
참조를 비교하여 하나의 객체 만 생성되었는지 확인합니다.
assertTrue(literalOne == literalTwo);
그 이유는 String 이 풀에 저장되어 있기 때문입니다 . literalOne 은 "baeldung" 문자열 을 풀에 추가하고 literalTwo 는이를 재사용합니다.
5. new를 사용한 문자열 초기화
새 키워드를 사용하면 몇 가지 다른 동작을 볼 수 있습니다 .
String newStringOne = new String("Baeldung"); String newStringTwo = new String("Baeldung");
두 String 의 값은 이전과 동일하지만 이번에는 다른 객체를 사용해야합니다.
assertFalse(newStringOne == newStringTwo);
6. 빈 문자열 의
이제 세 개의 빈 String을 생성 해 보겠습니다 .
String emptyLiteral = ""; String emptyNewString = new String(""); String emptyNewStringTwo = new String();
우리가 지금까지 알고 있듯이, emptyLiteral이 받는 추가됩니다 문자열 다른 두 힙에 직접 이동하면서, 수영장.
이들은 동일한 객체가 아니지만 모두 동일한 값을 갖습니다.
assertFalse(emptyLiteral == emptyNewString) assertFalse(emptyLiteral == emptyNewStringTwo) assertFalse(emptyNewString == emptyNewStringTwo) assertEquals(emptyLiteral, emptyNewString); assertEquals(emptyNewString, emptyNewStringTwo);
7. null 값
마지막으로 null String 의 작동 방식을 살펴 보겠습니다 .
null String을 선언하고 초기화합시다 .
String nullValue = null;
nullValue 를 인쇄하면 이전에 본 것처럼 "null"이라는 단어가 표시됩니다. 우리가 어떤 방법을 호출하려고한다면, 에 nullValue를, 우리는 얻을 것 , NullPointerException이 예상대로.
그러나 "null"이 인쇄되는 이유는 무엇입니까? 실제로 null 은 무엇입니까 ?
글쎄요, JVM 사양은 null 이 모든 참조의 기본값 이라고 말하고 있으므로 특별히 String에 묶여 있지는 않습니다 . 그리고 실제로 사양은 null에 대한 구체적인 값 인코딩을 요구하지 않습니다 .
그렇다면 문자열 을 인쇄하기위한 "null"은 어디에서 오는 것일까 요?
PrintStream # println 구현을 살펴보면 String # valueOf를 호출하는 것을 볼 수 있습니다 .
public void println(Object x) { String s = String.valueOf(x); synchronized (this) { print(s); newLine(); } }
그리고, 우리가 보면 문자열 # valueOf, 우리는 우리의 답변을 얻을 :
public static String valueOf(Object obj) { return (obj == null) ? "null" : obj.toString(); }
그리고 이것이 "null"의 이유입니다.
8. 결론
이 기사에서는 문자열 초기화를 살펴 보았습니다 . 선언과 초기화의 차이점을 설명했습니다. 우리는 또한 new 사용과 리터럴 구문 사용 에 대해서도 다루었습니다 .
마지막으로 String에 null 값 을 할당하는 것이 무엇을 의미 하는지, null 값이 메모리에서 어떻게 표현되는지, 그리고 그것을 인쇄 할 때 어떻게 보이는지 살펴 보았습니다 .
이 기사에 사용 된 모든 코드 샘플은 Github에서 사용할 수 있습니다.