返回对象存储的实际类型,可用于判断两个对象实际存储的类型是否一致
public class Hello { public static void main(String[] args) { Test test = new Test(); test.test(); } } class Test extends Hello{ public void test(){ Hello a = new Test(); Test b = new Test(); System.out.println(a.getClass() == b.getClass()); //true,说明虽然a的声明类型是父类,其实际类型仍为子类 System.out.println(a.getClass()); //class Test } }
返回对象的哈希码值,根据对象的地址或字符串或数字使用hash算法计算出来的int类型数值,相同对象返回相同数值
public class Hello { public static void main(String[] args) { Hello a = new Hello(); Hello b = a; System.out.println(a.hashCode()); System.out.println(b.hashCode()); //相同对象哈希值相同 } }
返回对象的字符串表示,一般会重写该方法来自定义打印的内容
public class Hello { public static void main(String[] args) { System.out.println(new Hello().toString()); } @Override public String toString() { //快捷键ctrl + O return "重写toString()方法"; } }
判断两个对象是否相等,可进行重写来比较两个对象的属性是否相同
public class Hello { public static void main(String[] args) { Test a = new Test(1, 2); Test b = new Test(1, 2); //在重写了equals()方法后,如果两个对象的属性值相同,也能算是同一对象了 System.out.println(a.equals(b)); } } class Test{ int a; int b; public Test(){} public Test(int a, int b) { this.a = a; this.b = b; } @Override public boolean equals(Object obj) { if (this == obj){ //比较两个引用是否指向同一个对象 return true; } else if (obj == null){ //判断对象是否为null return false; } else if (obj instanceof Test){ //判断两个引用指向的实际对象类型是否一致 Test n = (Test) obj; //强制类型转换,因为在instanceof判断中,子类也是父类的对象类型,所以需要强制转换确保类型为Hello if (this.a == n.a && this.b == n.b){ //依次比较各个属性值是否相同 return true; } } return false; } }
JVM自动调用此方法,进行垃圾对象回收