美文网首页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