java == 号执行时比较情况补充

java == 号执行时比较情况补充

突然发现一个问题, 下图:
java == 号执行时比较情况补充
java == 号执行时比较情况补充
a与b和c用 == 号比较时执行结果都为true
b和c用 == 号比较结果为false(这个结果大家都知道原因b与c在堆区地址不同, 结果肯定为false)
但是a和c比较为true, a和b比较也为true, 这到底是为什么呢?

于是我通过编译查看生成的字节码文件, 试图找到答案
java == 号执行时比较情况补充
java == 号执行时比较情况补充

果不其然在字节码文件里找到了端倪
c与b直接将内存地址压入栈进行比较, a与b比较时b调用了doubleValue函数取出值再与a的值比较

总结

"=="号不一定是比较两个数的地址, 对于不是new出来的要特别小心