Study/java

[Java] String - hashcode(), trim() 공백 제거, intern() 사용법

hashcode()

String 객체의 hashcode를 변환해줍니다.

해시코드는 간단하게 말하면 객체의 고유한 값이라고 합니다.

Object클래스로 구현된 객체라면 이 메소드를 모두 가지고 있습니다.

그래서 값을 서로 비교할때 사용됩니다.

 

사용방법은 다음과 같습니다.

String str1 = "WORD";
String str2 = "WORD";
System.out.println("str1's hashcode : " + str1.hashCode());
System.out.println("str2's hashcode : " + str2.hashCode());

String str3 = new String("WORD");
System.out.println("str3's hashcode : " + str3.hashCode());

hashcode 사용결과
hashcode 사용결과

str1, 2, 3모두 "WORD"라는 문자열입니다.

str3의 경우 new로 선언된 문자열이라 이전에 선언된 문자열과 비교(==)를 하면 주소값이 달라서 false가 나올것입니다.

하지만 hashcode는 모두 같은 값이 나옵니다.

 

 

 

 

원래 Object의 hashcode를 String에서 재정의했기때문에 두 문자열의 주소값이 달라도 값이 같으면 같은 hashcode가 나온 것입니다.

해당 내용 출처 : https://blog.naver.com/travelmaps/220930144030

 

trim()

문자열 앞뒤의 공백을 제거해주는 메소드입니다.

자바뿐만 아니라 다른 언어에도 흔하게 볼수있는 문자열 관련 함수입니다.

String str = "  a      b    c    ";
System.out.println("시작" + str.trim() + "끝");

trim 사용결과
trim 사용결과

 

intern()

intern에 대해서는 여기에 설명이 잘 나와있습니다.

https://www.latera.kr/blog/2019-02-09-java-string-intern/

 

간단하게 설명하자면 intern은 객체의 고유성을 유지시켜주는 메소드입니다.

문자열을 선언할때 intern을 사용하면 해당 문자열이 pool에 있는지 살펴보고 있으면 그 값을 가져오고 없으면 새로 만들어줍니다.

String str1 = "WORD";

String str2 = new String("WORD");
System.out.println("str1 == str2 result : " + String.valueOf(str1 == str2));

String str3 = new String("WORD").intern();
System.out.println("str1 == str3 result : " + String.valueOf(str1 == str3));

intern 미사용, 사용 결과
intern 미사용, 사용 결과

intern을 사용하지 않은 str2의 경우는 등호로 비교했을때 주소값이 다르기 때문에 false를 반환하고

intern을 사용하여 선언한 str3은 이미 str1에 "WORD"라는 값이 있기때문에 그 값을 가져오게 됩니다.

그래서 str1과 str3의 주소값이 같다고 나옵니다.