在介绍关系操作符之前先来看如下例子:
Tank t1 = new Tank(); Tank t2 = new Tank(); t1.level = 10; t2.level = 10; System.out.println(t1 == t2); System.out.println(t1 != t2);
output:
false
true
解释:尽管对象的内容相同(都是10),然而对象的引用却是不同的,而== 或者 != 比较的是对象的引用。
如果想比较对象的实际内容,此时,必须使用所有对象都适用的特殊方法equals()。但这个方法不适用于“基本类型”。
看下面例子:
Tank t1 = new Tank(10); Tank t2 = new Tank(10); System.out.println(t2.equals(t1)); class Tank { public Tank(int k) { level = k; } int level; };
output:
false
why????
这是由于equals()方法的默认行为是比较引用。所以,除非在自己的新类中覆盖equals()方法,否则不可能出现我们希望的行为。
class Tank { public Tank(int k) { level = k; } int level; public boolean equals(Tank v) { return (this.level == v.level); } };
总结:使用 == 或者 != 是直接比较对象的引用,尽管对象的内容相同,但是并不一定相等。
一般地,我们的新建类都会实现方法equals(),用于比较对象的值或内容,而不是比较对象的引用。默认地,equals()方法比较的是对象的引用。