这两天看了好多有关==和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,这中间有什么过程吗还?看了其它的帖子,砍刀一些高手说的什么用到对象池什么的,我还是不太明白,希望高手能给个详细的解释。
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,这中间有什么过程吗还?看了其它的帖子,砍刀一些高手说的什么用到对象池什么的,我还是不太明白,希望高手能给个详细的解释。
堆中,内存池中都创建
String b="abc";
上面的内存池中的
照3楼说的,程序输出的应该是true了,但程序的结果是false。
String b="abc";
这两条语句相当于是创建了两个对象
==在进行两个引用型变量之间的比较时,只有当两个引用变量引用同一个对象,它才为true,显然a和b是两个不同的对象,虽然它们的内容相同
而equals只比较它们的内容
public class Test{ public static void main(String[] args)
{
String a="abc";
String b="abc";
System.out.print(a==b); } }
//输出结果是true请不要人云亦云,程序的输出结果我知道,我现也在可以死记住这个模式,但我还是想知道是为什么?(因为是自学,所以才发帖请教)