关系操作符
==与
!=适用于
所有对象。下面为一个
例子:
package test;
public class Test {
public static void main(String args[])
{
Integer i1=new Integer(48);
Integer i2=new Integer(48);
System.out.println(i1==i2);
System.out.println(i1!=i2);
}
}
结果为先
false,再true.很多人可能会感觉奇怪,为什么不是先true,再false。
因为==与!=比较的是对象的引用,尽管i1,i2对象指向的值一样,但是是
俩个不同的对象引用,所以先为
false,再true.
要比较对象里面的实际内容,可以采用equals(),下面为例子:
package test;
public class Test {
public static void main(String args[])
{
Integer i1=new Integer(48);
Integer i2=new Integer(48);
System.out.println(i1.equals(i2));
}
}
结果为
true.但是重点不在这,当你自己创建一个类,如下
例子:
package test;
public class Area {
int i;
}
package test;
public class Test {
public static void main(String args[])
{
Area a1=new Area();
Area a2=new Area();
a1.i=a2.i=100;
System.out.println(a1.equals(a2));
}
}
结果是false,这是由于equals的默认行为是比较对象的引用,调用的是
boolean java.lang.Object.equals(Object obj)这个方法。
而在Integer这个类中调用的是boolean java.lang.Integer.equals(Object obj)这个方法。
因为在Integer这个类中重写了equals这个方法,而这个方法是比较俩个对象中的内容是否相同,而不是比较对象的引用。
所以除非在自己的新类中覆盖equals方法,否则会表现出equals的默认行为即比较对象的引用,而不是比较对象的内容。