== 연산자는 피연산자가 (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