黑马程序员技术交流社区
标题:
栈堆常量池。。
[打印本页]
作者:
123_yaya
时间:
2014-6-8 14:24
标题:
栈堆常量池。。
本帖最后由 123_yaya 于 2014-6-8 16:41 编辑
这样分析对不对:
还是因为常量池的原因:
public static void main(String[] args) {
String str="abc";
String str1=new String("abc");
String str2="abc";
System.out.println(str==str1);//结果为false
System.out.println(str2==str);//结果为true
}
分析:第一个 str在栈中创建了一个引用,指向堆,堆里面存放了"abc".
str1因为是new String(),所以,在堆中新创建一块空间存放"abc",然后栈中的引用指向堆中的“abc",注意,这个"abc"和上面的”abc"是不一样的,str不等于str1的。
第三个str2发现了堆中已经存在了“abc",所以,栈中的引用直接指向第一个堆中的”abc",所以str2==str3。
作者:
never615
时间:
2014-6-8 15:00
恩啊,是的
作者:
郝培慧
时间:
2014-6-8 15:42
第一个:一个在栈区 一个在堆区
作者:
a6217815
时间:
2014-6-8 16:30
对的,比相同要比内容和地址,str和str2都在栈里面,str1在堆里面
str和str1的地址不相同
作者:
liujie445012100
时间:
2014-6-8 19:57
String str="abc"; 栈中创建一个str的引用类型变量,指向常量字符串池中,
String str2 = new String("abc");new出来的都是新的对象,在"abc"中堆中。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2