자바 에서 두 문자열 이 같 음 을 어떻게 판단 합 니까?
자바 에 서 는 두 가지 방법 으로 이 일 을 할 수 있 습 니 다.그런데 이 두 가 지 는 또 어떤 차이 가 있 습 니까?
먼저 예제 코드 를 보 겠 습 니 다.
String a1 = "abc";
String b1 = "abc";
// == , , 。
System.out.println(a1 == b1); // true
String a2 = new String("abc");
String b2 = new String("abc");
System.out.println(a2 == b2); // false a b 。
// equals , 。
System.out.println(a2.equals(b2)); // true
String a3 = a1 + "d";
String b3 = a1.concat("d");
System.out.println(a3 == b3);
자바 의 모든 대상 은 Object 클래스 에서 계승 되 며, Object 클래스 에서 이 루어 지 는 equals () 방법 은 다음 과 같 습 니 다.
public boolean equals(Object obj) {
return (this == obj);
}
자바 문자열 생 성 과정
"=" 할당 을 사용 할 때 메모리 에 이 문자열 이 있 으 면 이 변수 에 주 소 를 직접 주 고 새로운 문자열 이 생기 지 않 습 니 다.
위의 코드 중의 "a1" 과 "b1" 과 같이 양 자 는 같은 실례 를 가리킨다.
"+" 또는 "concat" 방법 으로 문자열 을 연결 할 때 새로운 문자열 을 만 들 고 새로운 메모리 공간 을 차지 하기 때문에 "= =" 판단 을 사용 할 때 false 로 돌아 갑 니 다.
자바 에서 String 의 인용 방식
String a1 = "abc";
String b1 = "abc";
System.out.println(a1 == b1); // true
먼저 메모리 에 문자열 'abc' 를 만 든 다음 에 주소 의 인용 을 변수 a1 에 주 었 고 그 다음 에 이 주소 의 인용 을 b1 에 주 었 습 니 다.따라서 a1 과 b1 은 같은 메모리 입 니 다.String 클래스 는 변경 할 수 없 는 클래스 이기 때 문 입 니 다.문자열 은 변경 할 수 없 기 때문에 이런 방식 은 문제 가 되 지 않 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.