关系操作符生成的是一个Boolean结果,它们计算的是操作数之间的关系,如果操作数之间的关系是真实的就会生成TRUE,如果不真实,则生成FALSE。
关系操作符包括(<、>、<=、>=、==、!=)。等于和不等于适用于所有的基本数据类型,而其他比较符不适用于Boolean类型。因为Boolean值只能为TRUE或者FALSE,大于和小于没有实际意义。
//:operators/Equivalence.java
public class Equivalence{
public static void main(String []args){
Integer n1 = new Integer(47);
Integer n2 = new Integer(47);
System.out.println(n1 == n2);
System.out.println(n1 != n2);
}
}
/*Output
false
true
*/
编译结果为先是FALSE,然后是TRUE,这是因为尽管两个对象的内容相同,但是对象的引用确实不同的,而== 和 != 比较的就是对象的引用,所以输出结果先是FALSE,再是TRUE。
如果想比较两个对象的实际内容是否相同,就用equals();但是这个方法不适用于“基本类型”,基本类型可直接使用==和!=即可。如下:
//:operators/Equivalence.java
public class Equivalence{
public static void main(String []args){
Integer n1 = new Integer(47);
Integer n2 = new Integer(47);
System.out.println(n1.equals(n2));
}
}
/*Output
true
*/
当我自己创建一个类,如下:
//:operators/EqualsMethod2.java
//Default equals() does not compare contents.
class value{
int i;
}
public class EqualsMethod2{
public static void main(String []args){
Value v1 = new Value();
Value v2 = new Value();
v1.i = v2.i = 100;
System.out.println(v1.equals(v2));
}
}
/*Output
false
*/
结果却为FALSE,这是因为equals()的默认行为是比较对象引用,所以在自己的新类中覆盖equals()方法,否则不可能表现出我们想看到的行为。
关于覆盖请看下篇~~~~