== 연산자는 피연산자가 (int, double, boolean...)일 때는 값이 같은지 비교
피연산자가 그 외 객체, reference type일 때 가리키는 주소가 같은지 검사한다.
String str1 = "hello";
String str2 = "hello";
System.out.println(str1 == str2);//true
String str3 = new String("hello");
String str4 = new String("hello");
String str5 = str4;
System.out.println(str3 == str4);//false
System.out.println(str4 == str5);//true
- str1 , str2는 String을 리터럴로 생성한 객체
- heap영역에 "hello"의 주소값을 가리키고 있다.
- 따라서, str1 == str2가 true를 리턴하는 것을 알 수있다.
- str3 , str4는 생성자를 이용해서 생성한 객체로 각각의 메모리에 "hello"라는 String을 만드는 것과 같다.
- 각자의 stack의 객체가 heap에 다른 존재의 "hello" 가리킨다.
- 따라서, 서로 주소값이 달라 false를 리턴한다.
- str4 , str5의 경우 str5는 str4가 가리키는 값(주소)를 대입했으므로 같은 주소가 된다.
- 따라서, 주소값이 같아 true를 리턴한다.
equals()는 내용이 같은지 검사하는 메소드 이다.
- Object클래스의 메소드로 모든 객체는 equals()메소드를 사용할 수 있다.
String str1 = "hello";
String str2 = "hello";
System.out.println(str1.equals(str2));//true
String str3 = new String("hello");
String str4 = new String("hello");
System.out.println(str3.equals(str4));//true
str1 , str2는 같은 주소, 값을 가지고 있어 equals메소드 결과 ture를 리턴한다.
ste3 , str4는 가리키는 주소는 달라도 값이 같으므로 equals메소드의 결과 ture를 리턴한다.
'Programming > Java' 카테고리의 다른 글
[JAVA 메소드]멤버,클래스메소드 (0) | 2022.03.17 |
---|---|
[JAVA] Arrays.toString() (0) | 2022.03.16 |
[java 2차원배열 정리]랜덤 정수 (0) | 2022.03.09 |
자바 버전으로 인한 오류 (0) | 2022.03.04 |
[자바 난수] Math.random() (0) | 2022.03.02 |