美文网首页SpringFrameworkJava 杂谈
a==(a=b)的返回值是False?

a==(a=b)的返回值是False?

作者: 杨赟快跑 | 来源:发表于2019-06-24 19:25 被阅读25次

今天无意中看到一个奇怪的问题,特意写篇简书记录一下

1.如题,返回值竟然是false

    public static void main(String[] args) {
        String a = "123";
        String b = "345";
        System.out.println(a.equals(a = b));
    }

2.利用反汇编解密

java -c -l .class文件路径
反汇编源代码

3.a=(a==b)的执行过程

首先,要明白局部变量表和虚拟机栈是不同的位置

  1. a("123"的引用)入栈
  2. b("345"的引用)入栈
  3. b的拷贝("345"的引用)入栈
  4. 栈顶元素(b的拷贝)赋值给局部变量表中的a(不是栈中的a)
  5. b的拷贝出栈
  6. 比较栈顶两元素(a和b)

虽然局部变量表中的a已经更新为b了,但是虚拟机栈中的a还是a,所以,栈顶两元素a和b的比较结果是false。

相关文章

网友评论

    本文标题:a==(a=b)的返回值是False?

    本文链接:https://www.haomeiwen.com/subject/ihqaqctx.html