String의 비교연산은 리터널이 아닌 객체의 번지값으로 계산 된다.
new연산자로 새롭게 객체 생성을 하지 않고서, 문자열 리터럴이 동일한 String변수 두개가 있다면, 같은 String 객체를 공유하도록 되어 있어 번지값이 같다.
// name1 == name2 (true)
String name1 = "최수정";
String name2 = "최수정";
// name1 == name2 (false)
String name1 = new String ("최수정");
String name2 = new String ("최수정");
객체 상관없이 내부 문자열만을 비교하고 싶을 경우에는 String 객체의 equals() 메서드를 사용한다. ▶️ 대소문자 구분 하므로 유의
charAt() 메소드를 이용 대체시, 객체에 새로운 내용을 덮어 쓰는게 아니라, 대체된 새로운 객체를 만든뒤 참조를 한다. 이유는 String 객체의 문자열은 변경이 불가한 특성을 갖기 때문
메모리 관련 의문점 : 그럼 대체 전 String도 힙 영역에 저장되어 있는 상태일텐데, 언제 메모리에서 내려가지?
str.substring(7) // index(7)에서 끝까지 자른다.
str.substring(0,6) // index(0)에서 index(5)까지 자른다.