这篇文章源于同事问我说:
String str1 = "abc";
String str2 = "abc";
String str3 = new String("abc");
str1 == str2为true,是不是表示str1和str2分配在栈上面的?他们没有被new空间。
然后LZ自己YY了一下,想了个办法用eclipse来查看变量的堆栈分配,权威性有待考证,如有不当,有劳赐教!
测试程序如下:
public class StackStringTest {
public static void main(String[] args) {
String str1 = "abc";
String str2 = "abc";
System.out.println(str1 == str2);
String str3 = new String("abc");
String str4 = new String("abc");
System.out.println(str3 == str4);
int a = 1;
Integer b = new Integer(1);
System.out.println(a);
System.out.println(b);
}
}
<

本文通过一个实例展示了如何使用Eclipse检查Java中字符串的堆栈分配。实验结果显示,无论是否使用new关键字,字符串常量都在堆上分配,并且相同内容的字符串会共享同一内存地址以节省空间。

2940

被折叠的 条评论
为什么被折叠?



