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()