String s1 = ""; String s2 = "\u0000"; String s3 = null;
s1、s2、s3 的区别,分别在字符串常量池和栈中的储存情况?
学习是最好的投资!
클래스 바이트코드 관점에서 이해해보자1.String s1 = "", 다음은 컴파일된 바이트코드인데, 이 경우에는 실제로 차이가 없음을 알 수 있다 s1="aaa" , 모두 push 상수 풀의 문자열을 스택 상단으로 가져와 지역 변수에 할당합니다.
2. String s2=null의 경우 이때 상수 풀에는 문자열 상수가 생성되지 않고 null만 스택 맨 위로 푸시되어 변수에 할당됩니다.
3. String s3 = "u0000"의 경우 NUL을 나타내는 문자열이 소위 제어 문자인 상수 풀에 생성됩니다.
테스트 환경: jdk-8.0-102
클래스 바이트코드 관점에서 이해해보자
으아아아1.String s1 = "", 다음은 컴파일된 바이트코드인데, 이 경우에는 실제로 차이가 없음을 알 수 있다 s1="aaa" , 모두 push 상수 풀의 문자열을 스택 상단으로 가져와 지역 변수에 할당합니다.
2. String s2=null의 경우 이때 상수 풀에는 문자열 상수가 생성되지 않고 null만 스택 맨 위로 푸시되어 변수에 할당됩니다.
으아아아3. String s3 = "u0000"의 경우 NUL을 나타내는 문자열이 소위 제어 문자인 상수 풀에 생성됩니다.
으아아아테스트 환경: jdk-8.0-102