==, equals()는 프로그래밍을 하면서 많이 봐왔다. == 비교는 위치를 비교하는 것이고 equlas는 값을 비교한다고 보면된다. primitive type과 reference type 두 타입에 대해선 서로 달라서 primitive type부터 이야기해 보겠다.
java의 Primitive type에는 8개가 존재한다
char, boolean, byte, short, int, long, float, double 이 친구들은 메모리에 값이 직접 들어간다.
public static void main(String[] args) {
int a = 1;
int b = 1;
if(a == b){
System.out.println("a랑 b는 같다");
}else {
System.out.println("a랑 b는 다르다.");
}
}

결과는 a랑 b는 같다이다. a랑 b는 같냐! 라고물어보면 직관적으로 알 수 있다. a 와 b 가 같은곳을 위치하기 때문이다.
class dog{
String name;
String age;
}
이름과 나이를 가진 dog이라는 클래스가 있다.
public static void main(String[] args) {
Dog Dog1 = new Dog("dog1", "1");
Dog Dog2 = new Dog("dog2", "2");
if(Dog1 == Dog2){
System.out.println("Dog1과 Dog2는 같은 개이다.");
}else {
System.out.println("Dog1과 Dog2는 다른 개이다.");
}
}
실행 결과는 다른개라고 나온다.

그렇다면 이름과 나이가 같은 개는 결과가 어떻게 될까?
public static void main(String[] args) {
Dog Dog1 = new Dog("dog1", "1");
Dog Dog2 = new Dog("dog1", "1");
if(Dog1 == Dog2){
System.out.println("Dog1과 Dog2는 같은 개이다.");
}else {
System.out.println("Dog1과 Dog2는 다른 개이다.");
}
}

다른개라고 나온다. 이유가 무엇일까?
답은 == 비교는 메모리의 위치를 비교하기 때문이다.

똑같은 이름을 가졌어도 new로 생성했기 때문에 다른 개라고 나오는것이다.
그렇다면 equals()는 무엇일까? 내용을 비교하는 것이다!
모든 클래스의 부모클래스인 Object는 equlas()를 정의하고 있다.
우리가 사용하려면 equlas를 오버라이딩 하여서 사용해야한다.

Dog 클래스에 equals를 오버라이딩 해주고

실행시켜보면

같은 개라고 나온다.
== 비교는 위치를 비교하는것이고 equlas 는 값을 비교하는 것이다.
참고로 String은 다른것들과 다르다! 다음에 기회가 된다면 글을 써보겠다.
참고 :
https://www.youtube.com/watch?v=6X1jsQQtwmo
https://www.youtube.com/watch?v=AoUVdLWLFQw