大家总是争论的一些老问题

hongboyongqi 2009-07-11 09:53:51
这两天看了好多有关==和equals的帖子,尤其是关于String和数组,现在还是有点迷茫。
public class Test{

public static void main(String[] args)
{
String a=new String("abc");
String b="abc";
System.out.print(a==b);

}

}

为什么会是false?String a=new String("abc");这句是把对象“abc”的引用赋给变量a,这时在执行String b="abc"之前,“abc”就已经存在了,那变量b不就应该指向存在的这个“abc”吗?那输出的就应该是true才对,但结果是false,这中间有什么过程吗还?看了其它的帖子,砍刀一些高手说的什么用到对象池什么的,我还是不太明白,希望高手能给个详细的解释。
...全文
55 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
hongboyongqi 2009-07-12
  • 打赏
  • 举报
回复
回2楼兄弟的话,看了不少贴了,没找到这个的解释,其它的我基本上都知道原因是什么了,但就是这个还有点不明白。
照3楼说的,程序输出的应该是true了,但程序的结果是false。
  • 打赏
  • 举报
回复
关于 String 对象的问题,真是经久不衰啊,从我来 CSDN 时就看到,到现在还是在讨论呢。

关于 String 对象的东西,在 CSDN 至少能搜出上百个帖子。
beidaliufeng 2009-07-12
  • 打赏
  • 举报
回复
呵呵..
这个问题还不错喔..!
很多人都不不去关注这些原理..!
就像楼上那几位...!
楼主值得学习.....!
hongboyongqi 2009-07-12
  • 打赏
  • 举报
回复
照4楼说的,那就是String b="abc";意味着新建了个对象了,那下面的程序怎么解释:
public class Test{

public static void main(String[] args)
{
String a="abc";
String b="abc";
System.out.print(a==b);

}

}
//输出结果是true

请不要人云亦云,程序的输出结果我知道,我现也在可以死记住这个模式,但我还是想知道是为什么?(因为是自学,所以才发帖请教)
kanhai1987 2009-07-12
  • 打赏
  • 举报
回复
String a=new String("abc");
String b="abc";
这两条语句相当于是创建了两个对象
==在进行两个引用型变量之间的比较时,只有当两个引用变量引用同一个对象,它才为true,显然a和b是两个不同的对象,虽然它们的内容相同
而equals只比较它们的内容
zhangshaolongjj 2009-07-11
  • 打赏
  • 举报
回复
String a=new String("abc");
堆中,内存池中都创建
String b="abc";
上面的内存池中的
java1109 2009-07-11
  • 打赏
  • 举报
回复
以前的很多贴子上都说的很详细的
楼主再去仔细看看

62,621

社区成员

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

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