Java对象的比较,仔细读一下会发现不一样的世界呦!

package neicun;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class TestHeap {
		//猜一猜打印的结果
    public static void main(String[] args) {
       TestHeap t1 =new TestHeap();
       TestHeap t2 =new TestHeap();
     
        System.out.println(t1==(t1=t2));
        System.out.println((t1=t2)==t1);
   
    }
}

答案是:
false
true
为什么
//判断换内存地址之前的t1,是不是全等于一个换了内存地址的t1,答案是:false
System.out.println(t1==(t1=t2));  
//把t1的内存地址换过之后,
// 判断换过地址之后的t1是否等于换过内存地址之后的t1
//答案是:两个都是换过的,true
System.out.println((t1=t2)==t1);

本质问题?
1.其实就是道脑筋急转弯问题
2.但是透过现象看本质,其实是出现了三个问题
	3.1 内存指针的分配,当指向t1 =t2的时候,会把t1的内存地址指向t2
	3.2 ==比较的是内存地址
	3.3 == 和括号优先级的问题,也是本题中最重要的
		t1==(t1=t2) ,虽然括号的优先级要高于==,但是别要忘记代码执行的顺序:从左向右
		也就是说在括号执行前t1已经取出来了,放在了那里,然后再执行括号里面的,最后才进行比较
t1==(t1=t2) 执行顺序总结
顺序总结:
  (1) 取 t1
   (2) 执行括号里面的,换t1地址
 (3)比较换地址之前的t1和换地址之后的t1
*/
哈哈哈,一个小问题,如果关注不到其中任意一个点,都会出现问题,哈哈哈哈哈哈哈哈哈
。。。。。。。。。。。。。。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值