黑马程序员技术交流社区

标题: String对象分析 [打印本页]

作者: 象牙    时间: 2014-8-13 23:03
标题: String对象分析
在这里总结一下总是遇到的关于产生几个对象的问题,希望高手前来指教

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"; 》这样的问题就会只创建一个对象。














作者: 贾浩田    时间: 2014-8-14 10:47
说的不错,证明你学的很认真,我之前的都快忘的差不多了
作者: 画了一个圈儿    时间: 2014-8-14 11:11
为什么String s1="Hello"+" world ";String s2="Hello";String s3="world ";String s=s2+ s3;会产生四个对象,是因为 String s = s2+s3; 直接将s2和s3所指向的字符串直接相加,合成一个新字符串,而不再判断它是否前面已经存在的字符串相同吗?
作者: chengzhx76    时间: 2014-8-14 16:45
字符串的操作一直很迷惑




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2