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

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

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文件路径
a==(a=b)的返回值是False?_第1张图片
反汇编源代码

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?)