定义对象的问题

kong2010 2004-11-21 08:58:05
String a = new String("kong"),b = new String("kong");
System.out.println((a==b));
------------------------------------------------------
上面的代码会打印false
而如果用这样来定义:String a = "kong",b="kong";
它就会打印true
请问为什么?
...全文
63 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
beakham 2004-11-22
  • 打赏
  • 举报
回复
第一种情况那是生成了两个对象,a,b分别是指向这两个对象地址的引用,比较a和b,那肯定不同

第二种情况a和b都是指向同一个对象,所以比较就相同。

基本同意楼上两位的。
zhaoke5421 2004-11-21
  • 打赏
  • 举报
回复
第一种情况是生成两个对象。而==和!=对于对象而言是比较他们的object reference,a 和b 的名字当然不相等所以输出是false,你如果用两个对象的equals()进行比较就会得到true;
第二种情况是两个基本型别。==和!=比较的是两个变量的值,所以输出是true。
funcreal 2004-11-21
  • 打赏
  • 举报
回复
String是单例模式。
new String是建立新的对象,你new了两个,地址就不同。
但在第二种情况下,"kong"的值赋给b的时候已经存在了"kong"这个对象,他就不new了,直接指向就可以了
所以,在任何情况下,都建议使用
String a="hello";
而不是String a = new String("hello");

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧