Java:判断字符串相等
PHPz
PHPz 2017-04-18 10:46:45
0
5
965
PHPz
PHPz

学习是最好的投资!

모든 응답(5)
黄舟

으아아아

a.intern() 메서드를 호출했지만 반환 결과를 다시 할당하지 않았습니다. a은 여전히 ​​원래 a입니다.

左手右手慢动作

equals()을 사용하여 문자열 동일성을 판단하세요. 이 질문은 Java에서도 실패했습니다.

PHPzhong

a.intern(); a 문자의 참조는 변경되지 않으며 반환 값이 있습니다.
다음은 동일합니다

으아악
左手右手慢动作

으아악

여기서 a와 "abc"는 두 개의 개체입니다. 인턴 메서드가 호출되면 문자 상수 풀에 이미 이 개체와 동일한 문자열이 포함되어 있으므로 뒤에 b="가 있어도 인턴 메서드 호출은 쓸모가 없습니다. abc", b와 a는 동일한 객체가 아닙니다.

출력을 동일하게 하려면 첫 번째 문장은 다음과 같습니다.

으아악

두 번째 문장은 다음과 같습니다.

으아악
洪涛

가장 먼저 알아야 할 것은 == 연산은 두 객체 또는 기본 유형 a와 b가 동일한 메모리 영역을 가리키는지 여부를 결정한다는 것입니다

String의 기본 구현은
private final value[]
입니다. String이 인스턴스화되면 실제로 System.arraycopy를 통해 char 배열을 저장하기 위해 연속 메모리를 나눕니다.

new String("abc")은 실제로 이러한 방식으로 String을 초기화하는 것이 권장되지 않습니다. 실제 구현에는 a = "abc"보다 한 단계 더 필요합니다.

  1. 메모리 공간을 나누어 임시 배열 임시 생성

  2. 온도[0] = 'a';온도[1] = 'b';온도[2] = 'c';

  3. 배열 값을 생성하고 value가 가리키는 메모리 공간을 temp가 가리키는 메모리 공간, 즉 &value = &temp(a = "abc"를 사용하는 경우 이 단계는 필요하지 않음)를 가리킵니다.

인턴 방식은 jdk1.5에서 제공하는 방식으로 메모리 최적화를 위해 사용됩니다. 동일한 문자열은 동일한 메모리 공간을 참조하는데, 이는 실제로 위의 세 번째 단계입니다. 여기서 a와 b가 같다면

로 쓸 수 있습니다. 으아악

실제 연산은 위의 세 번째 단계, 즉 b = a;

String b = "abc"의 실제 기본 구현은 다음과 같습니다.

  1. 메모리 공간을 나누어 배열값 생성

  2. 값[0] = a.값[0];값[1] = a.값[0]';값[2] = a.값[0];

두 번째 단계에서 String b의 value[0]에 있는 String a의 value[0]는 실제로 동일한 메모리 주소를 가리키므로 실제로는 b.value[0] = a.value[0 ] = ' a'이지만 b.value는 a.value와 동일하지 않습니다. 근본적인 이유는 가리키는 메모리 영역이 다르기 때문입니다

문자열 소스코드 분석을 살펴보는 것을 추천합니다

[JAVA 소스코드 분석 - Java.lang] 문자열 소스코드 분석

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿