문자열에 엮어서 함께 포스팅할 수도 있지만, 문자열 비교가 대충 훑고 넘어가면 상당히 헷갈릴 수 있는 부분이 있어서 정확히 하기 위해 분리했다.
어려운 게 아니라 언뜻 보면 헷갈릴 요소가 있다.

위 사진에서 각각 다른 변수이름을 가졌지만 변수의 값이 똑같다.
그러므로 num1과 num2는 같다.

이를 응용해서 각각 다른 변수이름을 가졌지만 문자열과 단어가 똑같은
문자열이 있으면 같은것일까?
결과는 같다.
하지만,

이렇게 new String을 붙히면 같은 문자열과 단어지만 각각 다른 값으로 저장되어 둘은 같지 않다고 컴퓨터는 판단한다.
그래서,

new String이 같다는 것을 표현할때는 equals()를 사용한다.
조금 더 설명하자면,
String a1 = "a"; String a2 = "a";
경우에는 "a"라는 값을 메모리 어딘가 만들어두고 a1과 a2가 같은 메모리 주소를 가르키게 하는것이다.
즉, a1과 a2가 같은 메모리, 같은 방에 있다. 그래서 true다.
반대로,
String a1 = new String("a"); String a2 = new String("a");
경우에는 각각 강제로 새로운 방을 만든거야.
그래서 a1과 a2는 내용물은 같지만 각자 다른 방에 있는것이다.
같은 메모리, 다른 방.
--로 확인하면 다른방이니까 false이고,
.equals()는 내용물은 같으니까 true다.
사진 출처 : 나도코딩
대부분의 사람들은 뭐야 별거 아니네? 할 수 있지만, 이 개념을 정확히 하지 않고 본인이 자바를 배우다가 어라? 이렇게 해도 같은데 왜 틀리지? 하는 상황이 와서 정리하였다.