MegRyan 发表于 2013-1-27 05:43:29

又是STRING的问题..

等   级:
发表于:2007-11-17   11:36:404楼   得分:0   
a       和       b       和c       各是一个对象   
相对于String       s=new       String(   "a   ")+new       String(   "b   ")+new       String(   "c   ");   
a和b相加后ab为一个对象,   
ab+c又是一个对象   
整个过程产生了5个对象   
s指向的就是第5个对象。   
其余4个没有被引用的对象会在内存紧缺的时候被垃圾回收。   

个人理解,如果不对楼下一定改正。   

=================================================================================

不知道你有没有看过Effictive   Java,这书是写JDK的一牛人写的,现在跑去GOOGLE了,书中说,在写程序时,建议我们不能这样定义一个String:
Java codeString   s=new   String( "a ")


这样不会产生两个String,当时我也纳闷,原来是这样的:“a”本身已经是一个string了,再new了一次,就产生两个了。
=================================================================================================

对于LZ这个问题,我给你个权威的回答吧:其实编译成.class文件后string的加法是由stringbuilder/stringbuffer来连接的。。。

至于产生几个对象,当然是四个了。JDK不会傻到“a”+“b”也产生一个新对象,SUN那些大牛们难道会不知道PERFORMANCE吗。。。。

实际上,编译后可以会变成这个样子:

Java code
StringBuffer ss = new StringBuffer();
ss.append("a").append("b").append("c");
String s = ss.toString;



不信的话,可以去看下.CLASS文件反编译后看下。

还是那句话,学东西要学精。我也在努力。
页: [1]
查看完整版本: 又是STRING的问题..