우리가 자주 쓰는 equals 내부를 들어가 보자
그냥 아래 단순 두 줄을 알아볼 것이다.
public class App
{
public static void main( String[] args )
{
String str = new String("test");
boolean result = str.equals("test");
}
}
초기화 과정
String 인스턴스 생성 후 파라미터에 해당하는 value, coder, hash 값 초기화
private final byte[] value;
private final byte coder;
private int hash;
@HotSpotIntrinsicCandidate
public String(String original) {
this.value = original.value;
this.coder = original.coder;
this.hash = original.hash;
}
value : 각각의 단어에 해당하는 byte 값
coder : type이 byte인데 잘 모르겠다
hash : 해쉬값 같은데 잘 모르겠다
아는 게 없다 아직
아.. hash는 hashcode이다.
String str = "test";
System.out.println(str.hashCode());
본격적인 eqluals 내부
equals의 코드는 이렇다
이전에 인스턴스 생성 시 초기화해두었던 값과 파라미터의 값이 같은지 비교
해당 파라미터 값이 String 인스턴스 타입인지 확인
static final boolean COMPACT_STRINGS = true;
byte coder() {
return COMPACT_STRINGS ? this.coder : 1;
}
COMPACT_STRINGS는 true이고 coder는 이전에 저장해두었던 0 이기에 왼쪽에 있는 coder 값 0을 반환
이것 또한 이전에 인스턴스 생성 시 저장해 두었던 값과 같은지를 비교하는 것이다.
this.isLatin() 은 위와 동일하고
StringLatin1 클래스의 equals를 호출한다. - (인스턴스 생성 시 저장해두었던 값, 파라미터의 값)
public static boolean equals(byte[] value, byte[] other) {
if (value.length == other.length) {
for(int i = 0; i < value.length; ++i) {
if (value[i] != other[i]) {
return false;
}
}
return true;
} else {
return false;
}
}
- 길이 비교
- 해당 byte 배열의 index의 값이 같은지 비교
결과
'Java > Java' 카테고리의 다른 글
(JAVA) 데몬쓰레드 (0) | 2020.01.23 |
---|---|
(JAVA) Integer.parseInt 내부 뜯어보기 (0) | 2020.01.22 |
(JAVA) 쓰레드 우선순위 (0) | 2020.01.21 |
(JAVA) 싱글쓰레드와 멀티쓰레드 (0) | 2020.01.20 |
(JAVA) 쓰레드의 개요(2) (0) | 2020.01.19 |