package com.lec.java;
public class String01 {
public static void main(String[] args) {
String a = "Hello"; // String 문자열을 "" 식으로 대입 연산자로 대입 시키면
String b = "Hello"; // Stirng 문자열은 상수풀에 저장되어 버린다.
System.out.println(a==b)
// == 연산자는 reference 변수의 참조값을 비교함 // 상수풀에 복사되어 같은 곳을 바라봄
//result => true
System.out.println(a.hashCode());
System.out.println(b.hashCode());
// 두 객체의 해시코드 값은 같다.
String a2 = new String("Java");
String b2 = new String("Java");
System.out.println(a2==b2); // new 연산자를 사용하여 생성하면 다른 객체로 두개 생성
// result => false
System.out.println(a2.hashCode());
System.out.println(b2.hashCode());
// 유의점
//hashCode값 출력(문자열값이 같으므로 같은 hashCode)
//스트링 키객체의 주소가 달라도 같은 값을 가지면 객체의 해쉬 코드는 같다
//String 클래스에 hashCode()메소드가 오버라이딩 되있기 때문에
//키 객체의 값이 같을때 이와 같이 같은 헤쉬코드를 리턴해야
//해쉬테이블, 해쉬맵 사용시 제대로된 Key로써 역할을 하기에 오버라이딩함
// 본인 설명 추가++
// 원래 Object의 Class 의 hashCode() 메소드랑은 메소드 내부가 다르게 정의됨 .
// 그래서 String 객체는 다른 일반적인 객체들과 달리 같은 문자열이 같으면 해쉬코드도 같음
/* => 결과값
* true
69609650
69609650
false
2301506
2301506
*
*/
}
} // end class