앞선 글에서 String선언이냐 new String선언이냐에 따라 결과값이 달라지는 신기한 경험을 하였다.
==일 때는 pass이고 equals일 때는 fail인 것을 보니 그렇다면 주소값에 차이가 있지 않을까?
Debug를 한번 찍어보았다.
String으로 선언한 id와 idcheck, idcheck2의 변수는 주소값이 22로 같았다.
new String으로 선언한 idcheck3 와 idcheck4의 주소값은 28과 29로 서로 달랐다.
그렇다면 String과 new String의 차이는
String으로 선언을 한다면 모두 같은 주소값을 가르키고
new String으로 선언을 한다면 선언할 때마다 다른 메모리(heap)이 생성된다는 것을 의미할 수 있겠다!
* 추가로 int의 경우에는 boolean, byte, char, short, int, long, float, double이 모든 데이터 타입들이 원시 데이터 타입이라고 해서 ==를 사용할 경우 String과 같이 주소값을 비교하는 것이 아니라 그 자체의 값만을 비교 한다고 한다.
'IT 관련 > JAVA' 카테고리의 다른 글
HashSet , HashMap , HashMap<String, HashSet<String>>, 이중 map 사용 (0) | 2022.03.17 |
---|---|
[Ljava.lang.String 자바 배열(Array)를 String으로 출력하기 (0) | 2022.03.17 |
자바 배열(array) (0) | 2021.01.23 |
자바 반복문 while & for문(print와 printIn의 차이) (0) | 2021.01.22 |
자바 연산자 == 과 equals의 차이점 (0) | 2021.01.19 |