Object는 객체를 만들 수 있는 구체 클래스이지만 기본적으로 상속을 사용해서 사용하도록 구현되어있다.
내부 메소드 : equals, hashCode, toString, clone, finalize
일반규약이 명확하게 정의되어있다. 이말은 이러한 규약에 맞지않게 사용한다면 기대하는 결과와 다른 결과가 나온다.
ex) HashMap, HashSet
== 과 .equals()의 차이
==과 .equals()의 주된 차이는 보이는바와 같이 == 은 연산자이고 .equals()는 메소드라는 점이다.
==은 참조하는 객체의 주소를 비교하고 (address comparison) .equals()는 객체의 값(content comparison)을 비교한다.
다만 .equals()는 값을 비교하기 이전에 == 비교를 통해서 주소 값을 비교하고 그 이후에 해당 객체에 대한 값을 비교한다.
https://blog.naver.com/gngh0101
만일 클래스에서 .equals()를 재정의하지 않았다면 어떻게 될까?
가장 가까운 부모에서 재정의된 .equals()를 사용한다.
public class EqualsEx {
public static void main(String[] args) {
String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(" == 비교 :: " + (s1 == s2));
System.out.println("equals 비교 :: " + s1.equals(s2));
}
}
이러한 결과가 나온 이유에 대해서 살펴보자
s1, s2는 각기 다른 객체들이다.
== comparison을 할때 false가 나오는 이유는 힙영역의 각기 다른 주소값을 가지기 때문이다.
.equals()는 이전에 언급하였드시 값을 비교하기 때문에 true가 리턴되는 것이다.
References
|
https://www.geeksforgeeks.org/difference-equals-method-java/
'Java > Java' 카테고리의 다른 글
(JAVA) autoBoxing , unBoxing의 이해 (1) | 2020.02.03 |
---|---|
(JAVA) equals에 대해서(2) (0) | 2020.01.31 |
(JAVA) Integer Cache (0) | 2020.01.29 |
(JAVA) wait() 와 notify() (0) | 2020.01.26 |
(JAVA) 쓰레드 동기화 (0) | 2020.01.25 |