3.7 关系操作符

在介绍关系操作符之前先来看如下例子:

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()方法比较的是对象的引用。

 

posted @ 2013-09-23 12:16  wiessharling  阅读(202)  评论(0编辑  收藏  举报