黑马程序员技术交流社区
标题:
Sting的一个疑问
[打印本页]
作者:
黑夜的触手
时间:
2015-4-18 21:26
标题:
Sting的一个疑问
String str1="abc";
String str2=new String("abc");
System.out.print(str1==str2);
结果我false,这是为什么?
作者:
hui1130
时间:
2015-4-18 21:33
内存地址不同,是两个不同的对象
作者:
郝聚德
时间:
2015-4-18 21:36
str1是创建了一个对象直接指向了方法区的 str2是创建了俩个对象先指向了堆内存中然后才指向了方法区
作者:
王善辉
时间:
2015-4-18 22:26
他们地址值不同,
作者:
lai19
时间:
2015-4-18 22:58
他们比较的是地址值!比较内容要用equals()方法
作者:
不存在的奇迹
时间:
2015-4-18 23:03
直接打印字符串对象,打印的是内存地址,除非你重写toString方法
作者:
Chans_宇
时间:
2015-4-18 23:24
String str1="abc":引用指向方法区的常量池进行初始化。
String str2=new String("abc")不仅在常量池生成“abc”实例对象,还在堆内存开辟了空间,并引用常量池的字符串对堆内存进行初始化。
作者:
张乐
时间:
2015-4-18 23:27
应该把你的代码 (str1 == str2) 换成str1.equals.(str2)
作者:
caotierong
时间:
2015-4-18 23:36
str1这个引用是直接指向了常量池中的abc,而str2这个引用指向的是它在堆内存中创建的对象,str1在内存中只有一个对象,而str2在内存中是有两个对象的,两者的地址值不同,所以为false
作者:
cyr
时间:
2015-4-19 09:48
只要使用new关键字,就会在内存中开辟出一块新的地址空间。所以以上代码在内存上是有两个内存空间存储的,所以结果为false。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2