在java中 String a = "ab"; String b = "a" + "b"; System.out.println(a==b); 的内存图解是怎样的?

2024-11-27 14:40:26
推荐回答(4个)
回答(1):

栈中一个a,字符串常量池中一个"ab"。a指向"ab"。
栈中一个b,b指向字符串常量池的"ab"。

"a" + "b"这个会有一个运算的过程,现在jdk1.5以后在编译器有个优化,会自动吧+替换成StringBuilder的append,运算之后会把“ab”的引用返给b。然后“a”,"b"会被回收。

回答(2):

"a"+"b"和"ab"都是常量,对编译器来说常量都会在编译过程中合并,即编译器会把String a="a"+"b";变成String a="ab";。所以编译出来的程序没有性能上的区别。

如果是两个变量相加情况就不一样了。

回答(3):

丑了点~但是基本就是这个意思了

回答(4):

返回true啊
a 和 b 是指向同一个地址的
java 中 == 比较俩个对象的地址。