finalize 메소드를 사용 하여 오버라이딩 할 수 있다.
package org.example;
public class Person {
private String name;
public Person(String name) {
this.name = name;
}
@Override
protected void finalize() throws Throwable {
super.finalize();
System.out.println("destroyed" + name);
}
}
package org.example;
public class Main {
public static void main(String[] args) {
Person p1 = new Person("park");
Person p2 = new Person("yoon");
p1 = null;
p2 = null;
// Oracle 이거 쓰지마.
System.gc(); //가비지 컬렉션 힙영역 직접 삭제해라
System.runFinalization(); //소멸 시에 호출되는 함수 실행해라.
System.out.println("end of program");
}
}
가비지 컬렉션 힙영역을 삭제 할 수 있다.
equals 를 사용해서 비교 할 수 있다.
package org.example;
public class INum {
private int num;
public INum(int num) {
this.num = num;
}
@Override
public boolean equals(Object obj) {
// return super.equals(obj);
return this.num == ((INum)obj).num;
}
}
return 의 두개는 똑같은 뜻이다.
package org.example;
public class Main2 {
public static void main(String[] args) {
INum iNum1 = new INum(10);
INum iNum2 = new INum(10);
INum iNum3 = new INum(13);
System.out.println(iNum1);
System.out.println(iNum2);
System.out.println(iNum3);
System.out.println(iNum1 == iNum2);
System.out.println(iNum1.equals(iNum2));
}
}
하게 되면 마지막 두개의 출력은 false,와 true 이 뜨는걸 확인할 수 있다.
package org.example;
public class Main3 {
public static void main(String[] args) {
String str1 = new String("so simple");
String str2 = new String("so simple");
String str3 = "so simple"; //같은 힙영역
String str4 = "so simple";
System.out.println(str1.equals(str2)); // 내용이 같은지 확인
System.out.println(str3 == str4);
}
}
String 메서드를 사용해서 equals 를 나타낼 수 있다.