在这里总结一下总是遇到的关于产生几个对象的问题,希望高手前来指教
String s = "Hello";与String s = new String("Hello");两者有什么不同呢,我们都很熟悉的结论是前者只创建了一个对象,而后者则创建了两个对象;
分析其具体原因不外是它们分别在什么位置,代表了什么关系,如String s = "Hello";由于没有new关键字所以它不可能在堆内存中出现,s仅仅是与一个对象被引用的关系,在说一说它的位置s是放在栈内存中的,而“Hello”这一个对象则被放在字符串pool中,在创建这一个引用的时候,虚拟机会先到pool中查找是否存在,如果不存在才会创建一个对象来使用,如果存在则不需要再创建对象,只是创建了一个引用;
String s = new String("Hello");由于使用了new关键字则在堆内存中会创建一个对象,而另一对象则放在了pool中,这时候s指向的是堆内存中对象的地址。
String s = "Hello"+"world";创建了一个对象,那就是”Helloworld“在进行编译的时候右侧是两个字符串常量的相加,而s指向的是字符串相加后的引用;
而如果 变成 String s1="Hello";String s2="world ";String s=s1+s2;则会产生三个对象;
String s1="Hello";String s2=" world ";String s=s1+" world " ;也会产生三个对象;
String s1="Hello"+" world ";String s2="Hello";String s3="world ";String s=s2+ s3;则会产生四个对象;
同样 像 《String s = "a" + "b" + "c" + "d" + "e"; 》这样的问题就会只创建一个对象。
|
|