String str = "i"와 String str = new String("i")는 동일하지 않다. 두 개의 선언 방식은 서로 다른 방식으로 문자열을 생성한다.
- String str = "i"의 경우, 리터럴(literal) 표기법이 사용되며, "i"라는 문자열이 JVM의 intern pool이라는 메모리 공간에 저장된다. 이후 다시 "i"라는 문자열이 선언될 때는 이전에 저장된 문자열을 참조한다.
- String str = new String("i")의 경우, 새로운 String 객체가 생성되며, "i"라는 문자열이 저장된다. 이때 intern pool에 저장된 문자열과는 다른 객체가 생성된다.
따라서 두 개의 선언 방식은 서로 다른 객체를 생성하므로 동일하지 않다.
++) 문자열을 비교할 때는 equals() 메소드를 사용해야 한다. == 연산자는 두 개의 문자열이 동일한 객체를 참조할 때만 true를 반환합니다.
String str1 = "hello";
String str2 = "hello";
String str3 = new String("hello");
System.out.println(str1 == str2); // true
System.out.println(str1 == str3); // false
System.out.println(str1.equals(str3)); // true
'의문점 공부하기 > 📌 Java' 카테고리의 다른 글
📌 추상 클래스에서 추상 메서드는 필수적인가? (0) | 2023.06.14 |
---|---|
📌 String 클래스의 일반적인 메서드는 무엇이 있을까? (2) | 2023.06.13 |
📌 문자열을 반전시키는 가장 좋은 방법은 무엇일까? (0) | 2023.06.09 |
📌 String은 기본 데이터 타입일까? (0) | 2023.06.08 |
📌 자바에서 문자열을 조작하는 클래스는 무엇이 있을까? 각 클래스의 차이점은? (0) | 2023.06.07 |