[转]String str1=new String("abc")到底创建了几个对象?

Stirng str1 = new String("abc");
//这个产生了2个对象,一个是new关键字创建的new Sring();另一个是“abc”对象,abc在一个字符串池中str1这个对象指向这个串池
String str2 = "abc"; //此处没有创建新的对象,故运行到此还是2个对象,首先没new,另外它会去看字符串池中有没有相同的字符,如果有则str2直接指向abc,如果不是abc,而是xyz的话则又创建了一个对象
Stirng str3 = new String("abc");//如果不看前面的,光看这一行本身也是创建了2个对象,但abc在字符串池里已经有了,所以结合前面的就创建了1个对象new Sring();
所以总共创建了3个对象
解释下字符串池:他是一个由字符组成的一个数组就相当于char str1 =new char[]{a,b,c};
如果不是遇到新的字符串,则直接指向原来的串池,如果遇到新的字符串则创建一个新的串池,个人以为因为java基本类型中中没有String类型,所以当出现新的字符串的时候需要以上面char 类型来创建一个数组对象。

猜你喜欢

转载自weiweiguoqiang.iteye.com/blog/2099130