A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑夜的触手 中级黑马   /  2015-4-18 21:26  /  690 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

String  str1="abc";
String str2=new String("abc");
System.out.print(str1==str2);
结果我false,这是为什么?

评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1

查看全部评分

9 个回复

倒序浏览
内存地址不同,是两个不同的对象
回复 使用道具 举报
str1是创建了一个对象直接指向了方法区的   str2是创建了俩个对象先指向了堆内存中然后才指向了方法区
回复 使用道具 举报
他们地址值不同,
回复 使用道具 举报
他们比较的是地址值!比较内容要用equals()方法
回复 使用道具 举报
直接打印字符串对象,打印的是内存地址,除非你重写toString方法
回复 使用道具 举报
String  str1="abc":引用指向方法区的常量池进行初始化。
String str2=new String("abc")不仅在常量池生成“abc”实例对象,还在堆内存开辟了空间,并引用常量池的字符串对堆内存进行初始化。
回复 使用道具 举报
张乐 中级黑马 2015-4-18 23:27:12
8#
应该把你的代码 (str1 == str2) 换成str1.equals.(str2)
回复 使用道具 举报
str1这个引用是直接指向了常量池中的abc,而str2这个引用指向的是它在堆内存中创建的对象,str1在内存中只有一个对象,而str2在内存中是有两个对象的,两者的地址值不同,所以为false
回复 使用道具 举报
cyr 中级黑马 2015-4-19 09:48:48
10#
只要使用new关键字,就会在内存中开辟出一块新的地址空间。所以以上代码在内存上是有两个内存空间存储的,所以结果为false。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马