JAVA中“==”和equals()的区别

在JAVA中“==”对于基本数据类型来说,比较的是值的大小是否相同;但对于对象来说,比较的却是对象的句柄,而并非对象的内容,所以如下代码:

import java.util.*;
public class Project4 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Integer n1 = new Integer(49);
		Integer n2 = new Integer(49);
		System.out.println(n1 == n2);
		System.out.println(n1 != n2);
		
	}

}
很多人按照常理来说都会认为输出的是true和false,但是答案却是相反的,正确输出结果为:


原因就是“==”比较的是对象的句柄,尽管n1和n2对象的值相同,但创建对象时的句柄不同,则判断为false。那么该如何比较对象中的内容的值呢?需要用到对象的通用方法equlas()方法,所以,在代码后加入一句:

import java.util.*;
public class Project4 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Integer n1 = new Integer(49);
		Integer n2 = new Integer(49);
		System.out.println(n1 == n2);
		System.out.println(n1 != n2);
		System.out.println(n1.equals(n2));
	}

}
此时再看此程序的输出结果:


可以看到在输出equals()方法时,实际比较的是对象的值,这个问题得以解决,但是,仍然存在另一个问题,单独的equals()方法默认比较的仍然是句柄而并非对象的值,sun公司在编写JAVA类库的时候equals()方法进行了大部分的重写,使得它的比较为对象的值,那么如果我们自己创建一个类,进行equals()方法使用的时候仍然会出现一些问题,比如如下代码:

import java.applet.*;
class Value{
	int i;
}
public class project5 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Value n1 = new Value();
		Value n2 = new Value();
		n1.i=n2.i=49;
		System.out.println(n1.equals(n2));
	}

}
我们的本意是想比较两个对象的值,但是此时的输出为:


所以,对于equals()方法默认仍然为比较对象的句柄,我们必须通过自己在自己的类中重写equals()方法才能使它达到我们的要求,在实际的编程中如果不注意这一细节,那么会导致局部的输出问题。











  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值