[동등성과 동일성 비교]
동일성 (==) | 동등성 (equals) |
- 객체 '주소값' 비교 | - 논리적인 객체 내용 비교 |
※ String은 euqals를 사용(오버라이딩 되어 있음)
[String의 리터럴과 객체 생성 비교]
리터럴("winter") | 객체 생성(new String("winter")) |
- 상수 (문자열) 풀에 저장 - 같은 주소값 공유 |
- 객체 생성으로 각자의 주소값이 생김 - 다른 주소값 공유 |
[예제 코드]
public class S1Main {
public static void main(String[] args) {
Object obj = new Object();
Object obj2 = new Object();
System.out.println("객체 비교(동일성) : " + (obj == obj2)); //객체 주소값 자체 비교
System.out.println("객체 비교(동등성) : " + obj.equals(obj2)); //equals 자체가 == 를 가지고 있음
//불변객체
String n = new String("winter"); //객체 생성
String n2 = "winter"; //리터럴 생성
String n3 = "winter"; //리터럴 생성
System.out.println("객체 주소값 : " + obj);
System.out.println("객체 주소값 : " + n2); //String은 편의상 toString()오버라이딩 되어있다.
System.out.println("객체 비교(동일성) : " + (n==n2)); //객체 생성과 리터럴은 다르게 본다.
System.out.println("객체 비교(동등성) : " + n.equals(n2)); //String 자체 equals는 overriding
System.out.println("객체 비교(동일성) : " + (n2==n3)); //리터럴 생성시 같은 주소값을 참조한다.
System.out.println("객체 비교(동등성) : " + n2.equals(n3)); //값역시 동일하다
}
}
[리터럴과 객체 생성 도식화]

728x90
'Java > [국비] JAVA' 카테고리의 다른 글
[국비][JAVA] 가변 객체 StringBuffer 알아보기 (2) | 2024.06.04 |
---|---|
[국비][JAVA] 불변 객체 String 알아보기 (2) | 2024.06.03 |
[국비][JAVA] 상속과 다형성 이해 예시 (2) | 2024.06.02 |
[국비][JAVA] 그 외 제어자(지정자) Static 이해 및 클래스 영역/스택영역/힙영역 이해 (0) | 2024.06.01 |
[국비][JAVA] this 이해하기 (0) | 2024.05.30 |