여태 몰랐던 내용인데 알게되어서 적어본다.
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 |
'-Java' 카테고리의 다른 글
[h2]Database {} not found, either pre-create it or allow remote database creation (not recommended in secure environments) [90149-214] 오류 해결 (1) | 2023.01.15 |
---|---|
Boxing, UnBoxing 그리고 Wrapper (0) | 2017.10.03 |
JUnit (0) | 2017.09.29 |
Naming Convention, Camel Case (0) | 2017.09.26 |