String 클래스 == 불변클래스
* 값 변경이 가능하긴 하나 그자리에서 수정되는 개념 아님
* 값을 변경하는 순간 새로운 곳을 참조하도록 주소값 변경됨
*
* 빈번하게 값을 변경해야 될 경우 GC(가비지컬렉터)가 계속 기존의 값들을 지워줘야하는 단점
* 변경이 적고 한번 값을 담은 후 단지 조회만 할경우 String 클래스가 용이
*
public void method1() {
//1. 생성자를 통한 문자열 생성
String str1 = new String("hello");
String str2 = new String("hello");
System.out.println(str1/*.toString()*/); //hello
System.out.println(str2/*.toString()*/); //hello
//String 클래스에 toString메소드 이미 오버라이딩 되어있음 (실제 담긴 문자열 반환하도록)
System.out.println(str1 == str2); //false 주소값 비교이기 때문에
System.out.println(str1.equals(str2)); //true
//Object 클래스의 equals메소드는 주소값비교 - String클래스에 equals메소드 이미 오버라이딩 되어있음(주소값이 아닌 실제 담긴 문자열간 비교)
System.out.println(str1.hashCode());
System.out.println(str2.hashCode());
//Object 클래스의 hashCode메소드는 주소값 출력 - String 클래스에 hashCode 메소드 이미 오버라이딩 되어있음(주소값이 아닌 실제 담긴 문자열가지고 10진수 출력)
//찐 주소값을 알고자 할 경우 System.identityHashCode(레퍼런스)
System.out.println(System.identityHashCode(str1));
System.out.println(System.identityHashCode(str2));
public void method2() {
String str = new String("hello");
//2. 문자열을 리터럴값으로 생성
String str1 = "hello";
String str2 = "hello";
//리터럴 값 제시시 상수풀(String Pool) 영영에 올라감
//상수풀에는 동일한 문자열이 들어갈 수 없기 때문에 str1 과 str2는 동일한곳을 참조하고있음 => 주소값 일치
//String Pool 특징 : 동일한 문자열을 가질 수 없음.
System.out.println(str1); //hello
System.out.println(str2); //hello
System.out.println(str1.hashCode()); //99162322
System.out.println(str2.hashCode()); //99162322
System.out.println(str1 == str2); // true (주소값 일치함)
System.out.println(System.identityHashCode(str1));
System.out.println(System.identityHashCode(str2));
//찐 주소값 일치
System.out.println(System.identityHashCode(str));
}
public void method3() {
String str = "hello";
System.out.println(System.identityHashCode(str)); //1404928347
str = "hi"; // 값 변경 (새로운 값 대입)
System.out.println(System.identityHashCode(str));//1562557367 주소값 변경
str += "!"; //값 변경 (기존의 값에 연이어지게끔)
//str = str+ !;
// "hi!"
System.out.println(System.identityHashCode(str));//1101288798 주소값 변경 , 새로운곳 참조
}
'JAVA' 카테고리의 다른 글
10.API_String 메소드 (0) | 2022.11.04 |
---|---|
10. API_StringBuilder (1) | 2022.11.04 |
10. API _ Math (0) | 2022.11.04 |
9_3. 다형성 _ 인터페이스 (0) | 2022.11.03 |
9_2 . 다형성 _ 추상클래스/ 추상메소드 (0) | 2022.11.03 |