아무거나

비교와 Boolean 본문

Java/Java

비교와 Boolean

전봉근 2019. 6. 17. 12:15
반응형

문자와 문자를 비교할 때는 '=='를 사용하지 않고 .equals를 사용한다고 일단은 알아둬야 한다. ( equals는 주소값 비교를 하기 때문에 명확하다 )

 

​String a = "Hoit";

String aa = new String("Hoit");

이 두가지가 내부에서는 처리하는것이 어떻게 다를까?

 

먼저 String a = "Hoit"; 이렇게 선언을 하면 메모리 영역중 Heap Area의 Permanent Area에 String Pool로 등록된다.

이렇게 String Pool에 등록되면 프로세스가 종료될때까지 계속 유지된다.

String은 사용될때 먼저 String Pool에 등록되있는지 체크하고 처음 등록된 것을 사용하게 된다.

 

위의 것과는 다르게 String aa = new String("Hoit"); 으로 생성된 Hoit는 다른 객체 생성과 마찬가지로 만들때마다

새로운 메모리에 올라가게 된다.

 

즉, 동등연산자 ==는 메모리 주소적 동등을 비교하므로 단순 문자열 비교에서는 사용하면 안된다.

추가적으로 하나 말하자면 new를 통해서 생성된 Hoit도 intern();을 사용한다면 String Pool에 등록할 수 있다.

ex ) string aa = new String("Hoit");

      aa = aa.intern();

반응형

'Java > Java' 카테고리의 다른 글

[library] SSH Utils [private key, password]  (2) 2019.06.17
switch 문 사용할 때 주의점  (0) 2019.06.17
연산자(나눗셈, 형변환)  (0) 2019.06.13
형변환(Type Conversion)  (0) 2019.06.13
상수의 데이터 타입  (0) 2019.06.11
Comments