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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小小 初级黑马   /  2012-6-3 14:29  /  1990 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. String str1 = new String("abc");  
  2. String str2 = "abc";  
  3. System.out.println(str1==str2);
复制代码
很疑惑,为什么返回值居然是false

5 个回复

倒序浏览
String str1 = new String("abc");  
上面这句,str1引用的是堆内存中的对象
String str2 = "abc";  
str2引用的是池中的对象

str1和str2是不同的引用,所以会反回false
回复 使用道具 举报
== 比较两个对象是否是同一对象,str2是一个对象,str1是两个对象new一个对象跟abc
回复 使用道具 举报
老问题了吧,搜一下可以!
String a="123";//1个对象

String b=new String("123");//2个对象

有几个对象的问题;但你真的了解常量池吗?

String pool是在编译的时候建立的,也就是说,在编译的时候123就已经在stringpool中了;但new的对象是在运行时建立的,也就是说在heap中会有new的对象;可以说明了;第一个在编译时已存在,第二个在编译时存在一个,运行时有产生了一个。
回复 使用道具 举报
其实这问题只要记住一点就行
==比较的是对象的地址值 你创建了两个String对象 地址值不同 所以打印false;
而equals 比较的是对象的内容 System.out.println(str1.equals(str2)); 就会打印true;
回复 使用道具 举报
==这个问题很常误解:
==比较的是俩对象的引用也就是地址,而不是比较对象具体内容。

因而实现字符串对已的话应该用equals方法~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马