Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java什么时候为string创建新对象_Java - Fatal编程技术网

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

java什么时候为string创建新对象,java,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 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内部会发生什么

当您像下面这样声明时,Java会在字符串常量池中创建字符串文本,并且引用
a
b
都会引用池中的字符串对象
“mac”

String a="mac";
String b="mac";
因此,
=
.equals()
都返回true

但是,当您使用
new
操作符创建字符串对象时,字符串对象会像java中的其他常规对象一样在堆中创建


所以
=
操作符将返回false,因为这两个引用引用堆中的两个不同对象。

相关:以及有多少重复项。。。让我数一数……是的,这是游泳池和健身池的概念,请参阅String#intern()