Object类的使用
- Object类是所有Java类的根父类 。
- 数组也作为Object类子类出现,可以调用Object类中声明的方法;
- 如果在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.Object类
Object类中的功能(属性、方法)就具通用性。
- 属性:无
- 方法:equals() 、 toString()、 getClass() 、hashCode()、 clone() 、 finalize()、 wait() 、notify()、notifyAll()
Object类只声明了一个空参的构造器
equals方法
- 是一个方法,而非运算符,所以只能适用于引用数据类型
- Object类中equals()的定义:
public boolean equals(Object obj) {
return (this == obj);
}
- 说明:
- Object类中定义的equals()和==的作用是相同的:比较两个对象的地址值是否相同;即两个引用是否指向同一个对象实体
- 像String、Date、File、包装类等都重写了Object类中的equals()方法。重写以后,比较的不是两个引用的地址是否相同,而是比较两个对象的”实体内容”是否相同。
- 通常情况下,我们自定义的类如果使用equals()的话,也通常是比较两个对象的”实体内容”是否相同。那么,我们就需要对Object类中的equals()进行重写。
- 重写的原则:比较两个对象的实体内容是否相同.
例:
//手写——-有漏洞:当子类对象和父类对象的属性赋值相等时,子类对象.equals(父类对象)会返回true
class Order{
private int orderId;
private String orderName;
@Override
public boolean equals(Object obj) {
if(this == obj){//比较的类与本类所指向的堆空间相同
return true;
}
if(obj instanceof Order){
Order order = (Order)obj;
return this.orderId == order.orderId && this.orderName.equals(order.orderName); //String类的equals方法已重写
}
return false;
}
}
== 运算符和equal()的不同:
toString()方法在Object类中定义,其返回值是String类型,返回类名和它的引用地址。
public String toString() {
return getClass().getName() + “@” + Integer.toHexString(hashCode());
}
- 当我们输出一个对象的引用时,实际上就是调用当前对象的toString()
Customer cust = new Customer(“Tom”,21);
System.out.println(cust.toString());//com.atguigu.java1.Customer@15db9742—>Customer[name = Tom,age = 21]
System.out.println(cust);//com.atguigu.java1.Customer@15db9742—>Customer[name = Tom,age = 21]
- 在进行String与其它类型数据的连接操作时,自动调用toString()方法
Date now=new Date();
System.out.println(“now=”+now);
相当于 System.out.println(“now=”+now.toString());
- 可以根据需要在用户自定义类型中重写toString()方法 如String 类重写了toString()方法,返回字符串的值。
s1=“hello”;
System.out.println(s1);//相当于System.out.println(s1.toString());
S1=null;
System.out.println(s1)//null
System.out.println(s1.toString)//空指针异常
- 基本类型数据转换为String类型时,调用了对应包装类的toString()方法
int a=10;
System.out.println(“a=”+a);
- Java中,当打印一个数组名(除char型数组名)时,默认调用obj.toString,也就输出了地址。
char[] arr = new char[] { ‘a’, ‘b’, ‘c’ };
System.out.println(arr);// abc
int[] arr1 = new int[] { 1, 2, 3 };
System.out.println(arr1);// [I@15db9742
double[] arr2 = new double[] { 1.1, 2.2, 3.3 };
System.out.println(arr2);// [D@6d06d69c