JAVA编程思想(第4版)测试对象的等价性

关系操作符 ==!=适用于 所有对象。下面为一个 例子:
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的默认行为即比较对象的引用,而不是比较对象的内容。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值