Interviewer가 인터뷰 질문에서할당과 문자열 인스턴스 생성의 차이점은 무엇입니까?
다음 문장의 공통점과 차이점은 무엇입니까?
String s = "Test";
String s = new String("Test");
메모리 할당에 차이가 있습니까?
Interviewer가 인터뷰 질문에서할당과 문자열 인스턴스 생성의 차이점은 무엇입니까?
다음 문장의 공통점과 차이점은 무엇입니까?
String s = "Test";
String s = new String("Test");
메모리 할당에 차이가 있습니까?
String s = "Test";
먼저 문자열 상수 풀에서 문자열 "테스트"를 찾습니다. 발견되면 (자), 발견 된 객체를 참조하도록 (듯이)됩니다. 발견되지 않는 경우, 새로운 String 객체가 생성되어 풀에 추가되고 s가 새로 생성 된 객체를 참조하도록 만들어집니다.
String s = new String("Test");
먼저 새 문자열 개체를 만들고이를 참조하도록 지정합니다. 또한 "Test"문자열에 대한 항목이 인 경우이없는 경우 문자열 상수 풀에 입력됩니다.
문자열 "Test"가 풀에 없다고 가정하면 첫 번째 선언은 하나의 객체를 만들고 두 번째 선언은 두 개의 객체를 만듭니다.
내가 알기로는 상수의 조회/개체 생성 풀은 특정 코드 행이 실행될 때가 아니라 클래스가로드 될 때 클래스의 코드에서 발생하는 모든 리터럴에 대해 발생합니다. –
메모리의 차이는 형태의 표현이 고유 인스턴스를 공유하기 위해 "interned"문자열을 사용한다는 것입니다 : String s = "test"
.
형태의 호출 : String s = "test"
가 String s = new String("test")
첫 번째 통화가 (존재하는 경우) 번째 전화가 사용을하지 않고 새로운 인스턴스를 생성하는 기존의 일정한 표현을 사용한다 비해 효율적 기존 인스턴스.
각 문자열 리터럴은 String 클래스의 인스턴스 (§4.3.3에 대한 참조 :
String test = new String("test");
String internTest = "test";
String nonInternTest = new String("test");
System.out.println(test == internTest); // prints false
System.out.println(test != nonInternTest); // prints true
System.out.println(test.equals(nonInternTest)); // prints true
는 또한 JLS 따라서 할 동작을 지정 참고 : 코드 청크 아래
이 보여). String 객체는 상수 값을가집니다. 문자열 리터럴 또는 더 일반적으로 상수 표현식의 값인 문자열은 String.intern 메서드를 사용하여 고유 한 인스턴스를 공유 할 수 있도록 "격리"됩니다.
처음에는 String 풀에서 "Test"라는 문자열 리터럴을 검색합니다. 존재하는 경우, s가이를 참조하고 새 것을 작성하지 않습니다. "Test"리터럴이 없을 때만 새로운 객체를 만듭니다.
두 번째 경우에는 존재하는지 여부에 대해별로 신경 쓰지 않고 다른 개체를 만듭니다.
문자열 s = "테스트"; // 하나의 String 객체와 하나의 참조 변수를 만듭니다. 이 간단한 경우에는 "Test"가 풀에 들어가고 s가이를 참조합니다.
문자열 s = 새로운 문자열 ("테스트"); // 두 개의 객체와 하나의 참조 변수를 만듭니다. 이 경우 새 키워드를 사용했기 때문에 Java는 일반 (비공유) 메모리에 이라는 새 String 객체를 만들고이를 참조합니다. 또한 리터럴 "Test"는 이 풀에 배치됩니다.
그러나 공통점은 모두 값이 "Test"인 새 String 객체를 만들고 참조 변수 s에 할당한다는 것입니다.
+ 새로운 String 객체 생성과 참조 생성 사이의 차이점은 아무것도 아니지만 우리는 새로운 객체를 생성하기 위해 jvm에게 말하고 있습니다. 그리고 refence를 만드는 것은 우리가 객체를 스스로 만들고 있음을 의미합니다.
질문 없습니다. – Luv
http://stackoverflow.com/questions/390703/what-is-the-purpose-of-the-expression-new-string-in-java –