Primitive Type(기본형)은 실제값을 스텍 메모리에 저장하기 때문에
== 을 이용해서 값을 비교할 수 있다.
하지만 기본형이 아닌 Reference Type(참조형)은
실제값을 저장하는 것이 아니라 주소값을 힙 메모리에 저장한다.
리터럴 방식을 사용하면 String constant pool에 값이 저장되었는지 확인하고
있다면 기존 주소값을 반환, 없으면 새로운 주소값은 반환한다.
new 연산자를 이용하면 해당값을 새로운 주소값에 저장하여 주소값을 반환한다.
그렇기 때문에 ==을 통해서 비교하면 주소값을 비교하게되고
실제값이 같다고 해도 false를 반환할 수 있다.
equals 메서드를 통해 주소값이 아닌 실제값을 비교해야 기대하는 결과를 얻을 수 있다.
String a = "asdf"; //리터럴을 이용한 방식
String b = "asdf";
String c = new String("asdf"); //new 연산자를 이용한 방식
a == b; //true
a == c; //false
a.equals(c); //true
'JAVA(SPRINGBOOT)' 카테고리의 다른 글
[JAVA] VECTOR (0) | 2023.01.26 |
---|---|
[JAVA] GENERIC PROGRAMMING (2) | 2022.12.22 |
[JAVA] REQULAR EXPRESSION(정규 표현식) (0) | 2022.12.16 |
[JAVA] EXCEPTION(예외처리) (0) | 2022.12.16 |
[JAVA] STREAM(스트림) (0) | 2022.12.16 |