是产生了一个新对象,你可以做一个测试:
String s = "123";
String s1 = s + "abc";
String s2 = s + "abc";
System.out.println(s1 == s2);
结果返回的是false,说明地址引用并不是同一处。
原因:
因为s是变量,那么s无论是和常量还是和其他变量相+,在源码里面得到的新串,都是new出来的一个新的String,这个String是放在堆里面的。既然是new 出来的,那自然不是同一个对象。
产生了 ,这么跟你说,只有String s1 ="123";String s2 = "123";这样只产生一个,其他情况包括String s1 ="123"; String s2 = new String("123");都是产生不只一个对象的
这样赋值后,S1与S2的实际值是一样的,都是123abc,但他们不属于同一个对象,S2生成的又是一个新的对象。因为它们的指向的地址是不一样的。
是
没用