Object类
文章目录
Object类是什么?
- Object类是所有类的鼻祖,所有类都直接或间接继承Object,万物皆对象,为了多态
- Object中有两个经常被派生类重写的方法toString()和equals()方法
调用Object类的toString()默认返回:类的全称@地址,没有参靠意义,经常被重写,toString()来返回属性值
- 注意:String、StringBuilder等都重写了toString()方来返回字符串内容了
调用Object类的equals()默认比较的还是==(即比较地址),没有参考意义,所以常常重写equals()来比较对象的具体属性- 注意:String类已经重写equals()来比较内容,但StringBuilder()类没有 重写equals()的原则:
原则上要比较两个对象的属性值是否相同 两个对象必须是同一类型的, 若类型不同则返回false
/**
* 输出 引用类型变量 时默认调用Object类的toString()方法
* 该方法返回的字符串格式为:类的全程@地址(栈地址 --- 哈希码的无符号十六进制)
* 但通常这个返回结果对我们的开发是没有意义的
* 我们真正想输出的应该是对象的属性,我们认为Object欸的toString()的并不能满足我们的需求
* 因此常常需要重写toString()来返回属性值
*/
Point p = new Point(100,200);
System.out.println(p); //APIDay02.Point@1540e19d
System.out.println(p.toString()); //APIDay02.Point@1540e19d
在Point类重写toString()后
@Override
public String toString() {
return "Point{" +
"x=" + x +
", y=" + y +
'}';
}
System.out.println(p); //Point{x=100, y=200}
System.out.println(p.toString()); //Point{x=100, y=200}
Point p1 = new Point(100 ,200);
Point p2 = new Point(100, 200);
System.out.println(p1 == p2); //==比较的是地址 ---false
System.out.println(p1.equals(p2));//默认使用的是Object的equals()----输出false
//Point类中重写代码在equals()方法代码
//Point类重写toString()后
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Point point = (Point) o;
return x == point.x && y == point.y;
}
System.out.println(p1.equals(p2));//true