Java中Object类是所有类的直接或间接超类,处在所有类层次的最高点,包含了所有Java类中的公共属性。
1.getClass():获取当前对象所属类的类信息,返回Class对象
例:
public class JavaObjectgetClassExample1 { public static void main(String[] args) { Object obj = new String("JavaTpoint"); Class a = obj.getClass(); System.out.println("Class of Object obj is : " + a.getName()); } } //运行结果 Class of object obj is : java.lang.String
getClass()与class()区别
getClass()与Class()在绝大部分情况下是一样的,都可以获得一个类型名。两者最直接的区别为:
getClass()是一个实例类所具备的方法,只能有对象的实例变量才能调用,在程序运行时动态加载;
Class()为一个类的方法,获得类的Class对象,在java运行(编译)时就已经静态加载进去了。
例:
class A{ } class B extends Class A{ } public static void main(String[] args){ B b = new B(); if(b.getClass() == B.class) System.out.println("Yes,b.getClass() equals B.class"); if(b.getClass() == A.class) System.out.println("Yes,b.getClass() equals A.class"); else System.out.println("No"); } //输出结果 Yes,b.getClass() euqals B.class No
2.toString():返回Java对象在堆中的内存地址
源代码
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
//例1
public class ObjectToStringTest1{
public static void main(String[] args){
Object obj = new Object();
System.out.println(obj.toString());
}
}
//输出结果:java.lang.Object@7852e922
//例2:实体类
public class ObjectToStringTest2{
public class Person{
String name;
int age;
Person(String Name,int Age){
this.name = Name;
this.age = Age;
}
public String toString(){
System.out.println("the person‘s Name is " + name + "Age is " + age);
}
}
public static void main(String[] args){
Person p1 = new Person("xuanming",18);
System.out.println(p1.toString());
}
}
3.equals():比较两个对象引用是否指向同一对象,是则返回true,否则返回false。
源代码:
public boolean equals(Object x){ return this == x; }
相等和同一
定义:
1.相等:两个对象具有相同的类型,以及相同的属性值。
2.同一:两个引用变量指向的是同一个对象,通常用”==“判断两个对象是否同一。
注:同一的对象必相等,相等的对象不一定同一。
public class Tester1{ public static void main(String[] args){ BankAccount a = new BankAccount("Bob",123456,100.00f); BankAccount b = new BankAccount("Bob",123456,100.00f); if(a == b){ System.out.println("Yes"); }else{ System.out.println("No"); } if(a.equals(b)){ System.out.println("yes"); }else{ System.out.println("no"); } b = a; System.out.println(a.equals(b)?"yes":"no"); } } //运行结果 No no yes //a和b通过初始化分配了各自的存储区,“==”要求比较对象存储区域相同且有相同的值
4.clone():复制当前对象,并返回这个副本
步骤:
1.在类中覆盖clone方法,因为Object类中clone方法被定义为protected,需要覆盖为public。
2.实现Cloneable接口,赋予一个对象被克隆的能力
class MyObject implements Cloneable{ //... }
5hasCode():返回当前对象的哈希代码值
规定:
1. 在一个Java程序执行过程中,同一对象执行hashCode方法都应返回同一个整数。在不同的执行中,对象的hashCode方法返回值不必一致。
2.如果依照euqals方法,两个对象是相等的,则在hashCode方法应该返回同样的整数结果。反之并不要求这两个对象的hashCode方法返回值不同。
6.finalize().
在对象被垃圾回收之前,系统自动调用对象的finalize方法。如果需要覆盖finalize方法,覆盖的方法最后必须调用super.finalize.
7.notify、notifyAll、wait
final方法,不能覆盖,主要用于多线程程序中。
原文:https://www.cnblogs.com/thwyc/p/12269640.html