有关java等价性问题 == 误用

在一次实验的test阶段,测试文件总是不通过,最后发现我是犯了等价性方面的错误:

            在判断两个字符串是否相等时错误的使用==,将其改为equals()方法解决了问题。

            后来在经课上听讲与课后调查了解到:

                   ==是在判断两个对象是否指向内存里的同一段空间。

                   equals是将此字符串与指定的对象进行比较。当且仅当参数不为NULL并且是表示与此

对象相同的字符序列的字符串对象时,结果才为true。 

  就这个问题简化验证:将字符串s1与s2,利用==与equals()分别判断

        String s1="Hui";
		String s2=new String(s1);
		if(s1==s2) {
			System.out.println("==:T");
		}
		else {
			System.out.println("==:F");
		}
		if(s1.equals(s2)) {
			System.out.println("equals:T");
		}
		else {
			System.out.println("equals:F");
		}

  结果如下:可以看出==判断为false,利用equals()判断为true。 

  这里让我想起了一道以前的课堂的一道题可以加深对==的理解:

  答案为Flase;True   

       a为创建的Integer对象,b是自动装箱产生的Integer对象,其地址不同,故第一个为false。

       c为int类型,int与Integer比较时,Integer会进行拆箱,相当于两个int进行比较,故第二个为true。       

  通过以上测试可以看出:在判断相等的大部分情况下,我们在代码中的本意是equals(),

而不是==,这点不难理解,故在编写代码时一定要注意。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值