java什么时候为string创建一个新对象

时间:2014-04-23 05:30:04

标签: java

当我们做的时候

  String a=new String("mac");
String b=new String("mac");

if(b == a)
{
    System.out.println("condition 1 is true");
}
if(b.equals(a))
{
    System.out.println("condition 2 is true");
}

条件1失败,条件2为真,因为b和a是两个不同的对象

但是当我们做的时候

String a="mac";
String b="mac";

    if(b == a)
    {
        System.out.println("condition 1 is true");
    }
    if(b.equals(a))
    {
        System.out.println("condition 2 is true");
    }

这两个条件都是真的。为什么没有java为第二种情况创建一个新对象。如果java只在我们使用new()时才创建一个新对象,那么如果我们给两个字符串赋予不同的值,那么java内部会发生什么?

1 个答案:

答案 0 :(得分:2)

当您在下面声明时,Java在String常量池中创建String文字,并且引用ab都将引用池中的String对象"mac"

String a="mac";
String b="mac";

因此,==.equals()都返回true。

但是,当你使用new运算符创建String对象时,String对象就像在java中的其他常规对象一样在堆中创建。

因此==运算符将返回false,因为两个引用都引用堆中的两个不同对象。