又是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]