티스토리 뷰
Tip and Error/JAVA
toString() & equals() & hashCode() & clone()
geonwoopaeng@gmail.com 2021. 4. 16. 17:21Object class - 모든 class의 최상위 class
https://docs.oracle.com/javase/10/docs/api/java/lang/Object.html
- import java.lang (자동적으로 import 된다.)
- String, int, System...
- 모든 class는 object 클래스를 상속 받는다.
+추가 (toString() 관련)
toString()
- 객체가 가지고 있는 정보나 값들ㅇ르 문자열로 만들어 return 하는 메서드
Book book = new Book();
System.out.println(book.toString()); // System.out.println(book);
//인스턴스 출력 ch4_1.Book@3830f1c0
//ch4_1.Book : class의 full name (package 이름까지 나옵니다.)
//3830f1c0 : instance 메모리의 위치에 대한 가상 메모리 값(jvm이 준 값으로 실제 메모리 값은 아닙니다.)
String str = new String("test");
System.out.println(str.toString()); //System.out.println(str);
//test가 출력 됩니다. -> str.toString()이 Overriding 되었기 때문
Object Method
https://jeong-pro.tistory.com/172
equals()
- 두 객체의 메모리 위치(주소 값)을 비교 + (Override)재정의 가능
- heap 메모리 위치 = 메모리 위치 = 주소 값 = 같은 hashCode() 값
==
- 두 객체의 메모리 위치(주소 값)을 비교
- heap 메모리 위치 = 메모리 위치 = 주소 값 = 같은 hashCode() 값
hashCode()
hash: 정보를 저장, 검색하는 자료구조
equals()가 재정의 되면 hashcode도 재정의 되어야 한다.
=> eqauls()로 같은 객체인 경우 hashCode()도 반드시 같은 값
=> 같은 parameter 이동
instance의 저장 주소를 반환
heap 메모리에 instance가 저장되는 방식
//overriding 전의 hashCode() 값 얻기 System.identityHashCode(객체(instance));
clone()
객체의 원본을 복제하는데 사용
(instance의 상태 그대로 복제, 변화되면 변화된 것을 복제)
clone()을 사용할 경우 해당 클래스에 implements Cloneable 선언해줘야 한다.
Override 가능
ex)
//Student.java
public class Student {
private int id;
private String name;
//... 생성자
//equals override
@Override
public boolean equals(Objecct obj) {
if (obj instanceof Student) {
Student std = (Student)obj;
if (this.id == std.id)
return true;
else return false;
}
return false;
}
@Override
public int hashCode() {
//주소 값이 같아지도록 override 해주는 것입니다.
return id;
}
}
//Test.java
public class Test {
public static void main(String[] args) {
Student std1 = new Student(100, "paeng");
Student std2 = new Student(100, "paeng");
System.out.println(std1 == std2); //false
//false -> override 시 true
System.out.println(std1.equals(std2));
String str1 = new String("ab");
String str1 = new String("ab");
System.out.println(str1 == str2); //false
System.out.println(str1.equals(str2)); //true
//clone()
Student clone_s = (Student)std1.clone();
System.out.println(clone_s); // 100,paeng
}
}
반응형
'Tip and Error > JAVA' 카테고리의 다른 글
Class 클래스 <자료형을 모르는 Class 사용 할 때> (0) | 2021.04.17 |
---|---|
JAVA 컴파일 과정 (0) | 2021.04.17 |
default & static & private (0) | 2021.04.16 |
인터페이스 활용 (interface) (0) | 2021.04.14 |
인터페이스 (interface) (0) | 2021.04.14 |
공지사항
최근에 올라온 글