equals 와 "=="의 차이

문딤·2022년 6월 27일
0
post-thumbnail

학원 수강시 책 내용으로 분명한 차이가 있다고 한 내용이었다.

기억하기로는

  1. '=='는 객체의 주소 값을 비교해서 같은 객체면 true를 반환 하는 것이었다.

  2. Equals는 해당 주소안의 값을 비교해서 값이 같다면 true를 반환 한다고 기억하고 있었다.

==> 오늘 강의를 보면서 들은 내용은 '=='얘는 new String("값");으로 새로운 객체를 생성하여 집어넣은 것 이므로 다른 객체 값을 비교하게 된다고 이해했다.

그렇다면 매번 String s3 ="HI"; 해서 만든 객체와
String s4 = new String("HI");
얘네 둘은 다른 객체이면서, 같은 값을 가져야 하는데
코드를 작성해 보았다.

위에 내용처럼 코드를 작성해 보았다 .

이해한 내용이 맞다면,

  • '다른가봐'
  • ' 얘네 값이 같다.'

콘솔에서 이렇게 확인이 가능할 것이다.

사진과 같이 콘솔에서 생각한 값이 출력되었다.

그러고 String 객체 생성방법에 대해서 찾아보았다!

첫번째는 String literal, 즉 큰 따옴표("")를 사용하는 것이고,
두번째는 new 연산자를 사용하는 것이다.

두 방법에 차이는 무엇일까?

위의 사진을 보면

  • String literal로 생성한 객체는 "String pool"에 들어간다.

  • String literal로 생성한 객체의 값이 이미 String pool에 존재한다면, 해당 객체는 String Pool의 reference를 참조한다.

  • new 연산자로 생성한 String 객체는 같은 값이 String Pool에 이미 존재하더라도 , Heap 영역 내 별도의 객체를 가리키게 된다.

-> 즉 객체 참조 값인 해시코드 값이 다르고 다른 객체를 가리키므로 FALSE

String Constant Pool 이란?

자바 메모리 중 Heap 영역 안에 위치하여 스트링을 별도로 관리하는 장소입니다.
Heap 안에 있기 때문에 모든 스레드가 공유할 수 있고 가비지 콜렉터의 대상이 됩니다.

참고

https://velog.io/@kiiiyeon/%EC%9E%90%EB%B0%94-%EC%8A%A4%ED%8A%B8%EB%A7%81-%EA%B0%9D%EC%B2%B4-%EC%83%9D%EC%84%B1-%EB%B0%A9%EB%B2%95

https://coding-factory.tistory.com/536

감사합니다.

profile
풀스택개발자가 될래요

0개의 댓글