자바에서 문자열 초기화

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에서 사용할 수 있습니다.