늦은 프로그래밍 이야기
'==' 연산자와 .equals 의 차이 본문
'==' 연산자와 .equals의 차이
- int나 boolean 같은 일반적인 데이터 타입의 비교는 '==' 연산자를 사용하여 비교.
- String처럼 class의 값을 비교할때는 .equals() 메소드를 사용하여 비교한다.
String 변수 생성
String str1 = "apple"; //리터럴을 이용한 방식
String str2 = new String("example"); //new 연산자를 이용한 방식
리터럴을 이용한 방식
- string constant pool이라는 영역에 생성
- 내부적으로 String의 intern() 메소드가 호출
- intern() 메소드는 문자열이 string constant pool에 존재하는지 검색하고 존재하면 그 주소값을 반환.
- 없다면 string contstant pool에 넣고 새로운 주소값을 반환.
new 연산자를 이용한 방식
- heap 영역에 생성.
주소값 비교와 값 비교
- '==' 연산자는 두개의 대상의 주소값을 비교.
- .equals() 메소드는 두개의 대상의 값 자체를 비교.
- String 타입을 선언했을 때는 같은 값을 부여하더라도 서로 간의 주소 값이 다름.
'==' 연산자로 문자열 비교
String s1 = "abcd";
String s2 = new String("abcd");
if(s1 == s2) {
System.out.println("두개의 값이 같습니다.");
}else {
System.out.println("두개의 값이 같지 않습니다.");
}
// 두개의 값이 같지 않습니다.
- '==' 연산자의 경우 참조 타입 변수들 간의 연산은 동일한 객체를 참조하는지, 다른 객체를 참조하는지 알아볼 때 사용.
- 참조 타입의 변수의 값은 힙 영역의 객체 주소이므로 결국 주소 값을 비교하는 것이 되어 다르다는 결론이 나옴.
.equals() 메소드로 문자열 비교
String s1 = "abcd";
String s2 = new String("abcd");
if(s1.equals(s2)) {
System.out.println("두개의 값이 같습니다.");
}else {
System.out.println("두개의 값이 같지 않습니다.");
}
// 두개의 값이 같습니다.
- .equals의 경우 두 비교대상의 주소 값이 아닌 데이터 값을 비교.
- 어떤 방식으로 String을 생성하느냐에 따라 결과가 달라지지 않고 정확한 값을 비교할 수 있다.
'내일배움캠프 > Java 기초' 카테고리의 다른 글
| 정규표현식 (0) | 2022.11.24 |
|---|---|
| continue, break (0) | 2022.11.22 |
| 연산자의 우선순위와 결합방향 (0) | 2022.11.17 |
| 타입 변환 (0) | 2022.11.17 |
| 실수의 표현 방식 (0) | 2022.11.17 |
Comments