
자바의 데이터타입은 primitive이냐 아니냐로 나눠볼 수 있다. primitive는 원시라는 뜻을 가지며, 더이상 쪼갤 수 없는 데이터타입이라는 의미이다. 추가로 찾아보니 사진의 7가지 데이터타입 외에도 byte까지를 자바의 primitive type으로 분류한다.
일단 결론부터 이야기하자면 ==과 equals는 비교하려는 대상에서의 차이가 발생한다. 연산자인 ==은 비교하려는 대상이 저장되어있는 주소의 값을 비교하고, 메소드인 equals는 비교하려는 대상의 내용 자체를 비교한다.

primitive 데이터타입의 경우, 서로 다른 이름의 변수를 선언해도 변수에 들어가는 값이 같다면 각각의 변수가 가리키는 주소는 동일하다. 따라서 == 연산자를 사용하면 true를 반환한다.

반면 primitive가 아닌 데이터타입의 경우, 같은 내용으로 변수를 선언해도 각각 저장되어 다른 주소값을 가리키게 되므로 == 연산자를 사용하면 false를 반환한다.
primitive 데이터타입이 아닌 객체들은 equals 메소드를 가지고 있어 서로 같은 내용을 가지고 있는지 확인할 수 있다.

그런데, String의 경우 예외적으로 new 연산자를 사용하여 생성하는 것이 아니라 리터럴 형식으로 생성한다면 primitive 데이터타입과 동일하게 동작하여 == 연산자를 사용해도 true가 반환된다.