String 객체 특징 (== 연산자 특징)

Programing/Java 2015. 8. 22. 11:31 by kira-master


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 



'Programing > Java' 카테고리의 다른 글

Singleton 정리  (0) 2015.08.23
자바 메모리 구조 2  (0) 2015.08.22
자바 메모리 구조1. 변수의 저장영역  (0) 2015.08.22
홀짝 게임 예제  (0) 2015.08.21
1일차 Subnote  (0) 2015.08.17
Nav