java重写toString和equals方法
2020-03-22 本文已影响0人
android_Pie
java重写toString和equals方法
java.lang.Object
-
java 所有类的顶层父类
-
一个类不继承其他类,默认继承 Object
class A /*extends Object*/ { }
方法 toString()
获得一个对象的字符串表示,
Object 中的实现是:"类型@内存地址"
如果需要,可以在子类中重写 toString()
.equals(Object obj)
比较当前对象与参数对象 obj 是否相等
Object 中的实现是:
比较内存地址
this == obj
如果需要,可以在子类中重写 equals()方法.
public class Point /*extends Object*/ {
private int x;
private int y;
public Point() {
super();
}
public Point(int x, int y) {
super();
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
@Override
public String toString() {
return "("+x+", "+y+")";
}
@Override
public boolean equals(Object obj) {//向上转型
// 考虑参数的三种特殊情况
if(obj == null) return false;
if(obj == this) return true;
if(!(obj instanceof Point)) return false;
//当前对象的 x, y,与
//参数对象 obj的 x, y 比较
Point p = (Point) obj;//向下转型
return x == p.x && y == p.y;
}
}
public class Test {
public static void main(String[] args) {
Point a = new Point(5,6);
Point b = new Point(5,6);
System.out.println(a.toString());
System.out.println(b.toString());
System.out.println(a == b);//由于创建的是两个对象,内存地址不一样,返回false
System.out.println(a.equals(b));//由于子类重写了equals方法,返回的是对象的变量是否相等
}
}
QQ群号172660439.png