【JAVASE】带你了解instanceof和equals的魅力
在Java中,instanceof
和equals
是两个非常重要的操作符和方法,它们用于不同的目的,但在许多情况下,可以互换使用。
instanceof
操作符:
- 用于测试引用变量所引用的对象是否为指定的类型,如果是,返回
true
,否则返回false
。 - 语法:
result = object instanceof class
- 示例代码:
Object str = new String("Hello");
System.out.println(str instanceof String); // 输出:true
System.out.println(str instanceof Object); // 输出:true
System.out.println(str instanceof Integer); // 输出:false
equals()
方法:
- 用于比较两个对象是否相等。默认行为是比较引用地址,但可以在子类中重写该方法以比较对象的内容。
- 语法:
result = object1.equals(object2)
- 示例代码:
String a = new String("Hello");
String b = new String("Hello");
System.out.println(a.equals(b)); // 输出:true
// 重写equals方法比较对象内容
class Point {
int x, y;
Point(int x, int y) {
this.x = x;
this.y = y;
}
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Point)) return false;
Point point = (Point) o;
return x == point.x && y == point.y;
}
}
Point p1 = new Point(1, 2);
Point p2 = new Point(1, 2);
System.out.println(p1.equals(p2)); // 输出:true
在某些情况下,instanceof
和equals
可以互换使用,但它们的应用场景不同:
instanceof
用于检查对象的类型。equals
用于比较两个对象是否相等,可以在不同类型的对象之间使用,只要它们有相同的业务含义。
记住,在重写equals
方法时,应当同时重写hashCode
方法以保持hashCode
的一致性,并遵守equals
和hashCode
的常规协定。
评论已关闭