자바 에서 두 문자열 이 같은 지 비교 합 니 다.
간단 한 한 마디 로==두 문자열 의 주소 가 같은 지(같은 주소),equals()방법 은 두 문자열 대상 의 내용 이 같은 지 비교 합 니 다(물론 두 문자열 이 같은 주 소 를 참조 하면 equals()를 사용 하여 비교 해도 true 로 돌아 갑 니 다).
문자열 비교 가 복잡 해 보 이 는 이 유 는 값 형식 과 참조 형식 두 가지 데이터 형식의 차이 때 문 입 니 다.값 형식,예 를 들 어 int 형식 은 두 int 형식의 변 수 를 정의 하고 초기 화 할 때 int i=1;int j=i,이 두 변수 i,j 가 저장 한 것 은 1 이 값 입 니 다.if(i==j)를 사용 하여 판단 할 때 자 연 스 럽 게 i 와 j 를 되 돌려 줍 니 다. 。인용 형식,예 를 들 어 문자열 형식,두 문자열 형식의 변 수 를 정의 하고 초기 화 할 때 String s="abc";String s2 = s; 실제로 하나의 String 형식의 대상 만 만 들 었 습 니 다.이 대상 의 값 은 abc 이 고 s 와 s2 는 이 대상 을 참조 합 니 다.(값 형식 과 참조 형식 에 대한 내용 은 나중에 업 데 이 트 됩 니 다)
기초 편:
다음은 두 가지 예 를 들 어 두 가지 상황 에서 문자열 의 비교 문 제 를 분석 할 것 이다.
예 1. new 키 워드 를 사용 하여 두 String 형식의 변 수 를 설명 합 니 다.
1 String s1 = new String("abc");
2 String s2 = new String("abc");
3
4 // .equals() ==
5 if(s1.equals(s2))
6 {
7 System.out.println(" equals ");
8 }else
9 {
10 System.out.println(" equals ");
11 }
12 if(s1 == s2)
13 {
14 System.out.println(" == ");
15 }else
16 {
17 System.out.println(" == ");
18 }
실행 프로그램 에서 equals 로 true 를 비교 하고==으로 false 를 비교 합 니 다.이 유 는 다음 과 같다.
===두 문자열 대상 의 주소 가 같은 지 비교 하기 때 문 입 니 다.(같은 주소 인지)new 키 워드 를 사용 하여 대상 을 만 들 때 이 대상 은 저장 공간 을 따로 차지 하고 llg 이라는 문자열 의 값 을 저장 합 니 다.그래서 s1 s2 두 문자열 은 값 이 같 지만 저 장 된 주 소 는 하나의 주소 가 아 닙 니 다.예 를 들 어 두 사람 이 모두 l'이사'라 고 부 르 지만 그들의 주 소 는 한 곳 에 있 지 않 습 니 다.==을 사용 하여 비교 할 때 두 문자열 의 주소 가 같은 지 비교 하기 때문에 false 로 돌아 갑 니 다.그러나 equals()방법 으로 이 두 문자열 을 비교 하면 두 문자열 의 값 이 같은 지 비교 하여 true 로 돌아 갑 니 다.
예 2.정상 적 인 상황 에서 문자열 설명 과 정의.
//
String s1 = "abc";
String s2 = "abc";
// .equals()
if(s1.equals(s2))
{
System.out.println(" equals ");
}else
{
System.out.println(" equals ");
}
// ==
if(s1 == s2)
{
System.out.println(" == ");
}else
{
System.out.println(" == ");
}
프로그램 이 실 행 된 후에 두 가지 방식 이 모두 true 로 돌아 가 는 것 을 발견 했다.그럼 이 건 왜 일 까요?이 유 는 다음 과 같다.
일반적으로 스 택 에 기본 형식의 변수 와 대상 의 인용 변 수 를 저장 하고 new 에서 나 온 대상 과 배열 은 더미 에 저장 된다 고 생각 합 니 다.그러나 이 외 에 도 상수 지 라 는 구역 이 있다.저희 가 보통 String 을 생각 하 는 것 같 아 요. s1 = "abc"; 이렇게 설명 한 문자열 의 대상 은 상수 탱크 에 저 장 된 값 입 니 다.우리 가 String 을 만 들 때 s1 = "abc"이러한 대상 이후"abc"는 상수 탱크 에 저 장 됩 니 다.인용 String 을 만 들 때 s2 = "abc" 자바 바 텀 은 상수 탱크 에서'abc'가 존재 하 는 지 우선 찾 습 니 다.존재 하면 s2 가 이 값 을 가리 키 며 다시 만 들 지 않 습 니 다.그래서 사용==비교 할 때 주소 가 같 기 때문에 비교 한 결 과 는 true 입 니 다.
그러면 문제 가 돌 아 왔 습 니 다.상수 탱크 가 있 는 이상 문자열 이 new 에서 나 오지 않 았 습 니까?답 은 돼.
왜 equals 가 있어 야 합 니까?누 군가 일부러 new String 이 나온다 고 해서 그런 가?물론 아 닙 니 다.초보 자 는 위의 내용 을 먼저 이해 하 세 요.
진급 판:
최근 업데이트