여태 몰랐던 내용인데 알게되어서 적어본다.

String은 자료형이 아니라 객체라는 사실은 알고 있었을텐데

String만 예외적으로 new를 이용해 객체를 생성하지 않아도 된다한다.


1
2
String str1 = new String("str"// String Object generate
String str2 = "str" // simple case
cs




문자열을 비교할 때 equals()함수를 쓰는 이유를 알아봤다.

결론만 말하자면 == 연산자로는 String객체에 저장된 문자열을 비교할 수 없기 때문이다.

한마디로 "str"이라는 문자열은 리터럴이라 주소를 가지고 메모리에 할당 되는데

new를 이용해 문자열을 저장하면 메모리에 할당되는 동시에 그 메모리에 문자열이 저장된다.

2번째 줄과 같이 단순 대입을 한다면 "str"의 주소를 가져오는 꼴이다.


따라서 str1, str2의 내용은 같아 보여도 ==연산자는 주소를 가지고 비교하기에 (이때 주소는 JVM에 할당된 영역이다.)

서로 다른 것으로 인지한다.

1
2
3
4
5
6
7
8
9
String str1 = new String("str"// String Object generate
String str2 = "str" // simple case
 
str1 == str2 // false
str1 == "str" // false
str2 == "str" // true
str1.equals(str2) // true
str1.equals("str"// true
str2.equals("str"// true
cs



+ Recent posts