2013-03-05 2 views
0

Java에서 완전히 빈 문자열 풀이 있고 다음을 수행하면 'Hello'문자열 객체가 문자열 풀에 추가됩니다.단순 문자열 풀

String myStr = new String('Hello'); 

나는 새로운 문자열 ('Hello')에 대한 후속 호출을 알고 있습니다. 새 문자열 객체를 만들지 만 풀에 추가하지는 않습니다.하지만 'Hello'가 풀에없는 경우 처음에는 어떻게해야합니까?

편집 : 기본적으로, 나는 알 필요가 왜 거짓 다음 인쇄 :

String myStr = new String("Hello"); 
print(myStr=="Hello"); 

하면, 첫 번째 호출, 새로운 String ("안녕하세요")에; 풀에 Hello를 추가합니다. 그런 다음 비교 코드에서 풀 상주 개체 'Hello'를 리터럴 'Hello'(==의 오른쪽)와 비교합니다. 그러므로, ==의 왼쪽은 같은 객체 (풀의)를 오른쪽으로 가리키고 있지 않습니까?

답변

0

아래 게시물을 참조하십시오. 나는 당신에게 가장 좋은 대답을 줄 것 같아요 당신

What is String pool in Java?

클래스가

String myStr = new String("Hello"); 

가로드됩니다 포함 된 경우

+0

나는이 모든 것을 읽었습니다. 내 문제는 'new String()'에 대한 첫 번째 호출입니다. – TheCoder

0

이 "안녕하세요"문자열 풀에 추가됩니다 들으. new String()은 힙에있는 객체이며 내부 char 배열은 풀의 char 배열을 가리 킵니다. 새로운 String ("Hello")은 아니지만 "Hello"를 풀에 넣는 클래스 로더

+0

기본적으로 새로운 String() metjod는 먼저 Hello가 풀에 있는지 확인합니다. 그렇지 않다면 추가하십시오. 그렇다면 새로운 별도의 String 객체를 만드시겠습니까? – TheCoder

+0

내 대답에 대한 자세한 내용을 추가했습니다. –

0

예 아니요. 클래스의 어딘가에 리터럴 "Hello"가 있으면 클래스가로드 될 때 (코드가 실행되기 전에) 문자열 풀에 추가됩니다.

그러나 문자열 풀에없는 String이라는 새 인스턴스를 만듭니다.

그래서 "Hello" != new String("Hello")

하지만, 이미 거기 "Hello"이 있기 때문에 new String("Hello")는, 문자열 수영장이이 새로운 인스턴스를 추가하지 않을 수 있음을 의미 "Hello" == new String("Hello").intern()

.

그리고 new String(String s)은 문자열 풀에 문자열을 추가하지 않습니다. 예를 들면 다음을 추가하는 것이 유용한 이유는 무엇입니까? 문자열 풀에 대한 사용자 입력?

0

자바 '=='연산자는 객체의 참조가 아닌 객체의 내용을 검사하는 데 사용됩니다. 객체의 내용은 원시 데이터 유형과 함께 사용되지 않는 경우 자체 검사됩니다. 따라서 귀하의 경우에 myStr과 "Hello"는 메모리에서 서로 다른 두 객체이므로 false를 반환합니다. 반면에 객체의 내용을 비교하려면 equals() 메서드를 사용하십시오. 즉,

print (myStr.equals ("Hello")); 이 명령문은 true를 리턴합니다.