반응형
1. Striing 클래스의 hashCode()
: 주소값이 다른 인스턴스여도 value 값이 같으면 동일한 hashCode반환
1) 문자열 객체 사용하는 방법
" " 리터럴 형태
: 동일한 값을 가지는 인스턴스를 단일 인스턴스로 관리
String str1 = "java";
String str2 = "java";
String pool 또는 상수 풀 : String만 따로 관리되는 공간
같은 값을 가지 리터럴 형태의 인스턴스는 String pool에 관리 되기 때문에 중복값은 저장하지 않음
주소 값을 비교 해보면 true를 반환함
new String("문자열")
: 매번 새로운 인스턴스를 생성
String str3 = new String("java"); //String의 생성자를 호출하는데 인자로 "java"값을 전달한다~
String str4 = new String("java");
new로 새로운 인스턴스를 생생하게 되면 리터럴 형태와 달리 새로운 인스턴스를 할당하기 때문에
주소 값 비교시 false을 반환함.
2) hashCode 비교
System.out.println("str1의 hashCode : " + str1.hashCode());
System.out.println("str2의 hashCode : " + str2.hashCode());
System.out.println("str3의 hashCode : " + str3.hashCode());
System.out.println("str4의 hashCode : " + str4.hashCode());
출력 결과
str1의 hashCode : 3254818
str2의 hashCode : 3254818
str3의 hashCode : 3254818
str4의 hashCode : 3254818
= > value 값이 같으면 같은 해쉬코드를 반환되도록 오버라이딩 되어 있기 때문에, 주소값은 다르지만 hashCode 값은 동 일함.
3) 문자열은 불변
: 기존 문자열에 + 연산자를 수행하는 경우 문자열을 수정하는 것이 아닌 새로운 문자열을 할당하게 됨
String str2 = "java";
str2 += "oracle";
=> 다른 공간에 javaoracle이라는 문자열이 담기고 java를 참조했던
주소값이 javaoracle 주소값 참조하는 형태로 변경됨. 즉, 다른 인스턴스가 되었다.
2. String class의 equals()
: String 클래스의 equals() 메소드는 인스턴스 비교가 아닌 문자열값을 비교
동일한 값은 true, 아니면 false
Object의 equals() 메소드를 재정의 해둠
String str1 = "java";
String str2 = "java";
String str3 = new String("java");
String str4 = new String("java");
System.out.println("str1.equals(str3) : " + str1.equals(str3));
System.out.println("str3.equals(str4) : " + str3.equals(str4));
=> str1.equals(str3) : true
str3.equals(str4) : true
=> 문자열은 다 equals()로 비교하는 것이 가장 좋은 방법
반응형
'프로그래밍 > java' 카테고리의 다른 글
[자바 / Java] StringBuilder의 자주 사용되는 메소드 (0) | 2022.09.03 |
---|---|
[자바 / Java] 이스케이프 문자 사용 (0) | 2022.09.03 |
[자바/Java] String 클래스 : 자주 사용되는 메소드 (0) | 2022.08.29 |
[자바/Java] hashCode() , equals() (0) | 2022.08.29 |
[자바 Java] API (0) | 2022.08.29 |