作者: 韩伟 时间: 2012-7-14 11:00
楼上的解释的很清楚,在s负值的过程中,确实在内存中产生了6个String类型的对象,但是我个人认为整个过程只创建了一个变量,那就是s,其值是"abcdef",因为之前的五个对象你根本没法再次使用,没有任何引用指向它们,会被垃圾回收机制从内存中清除掉,那么内存中就只留下了s 。作者: 黑马刘涛 时间: 2012-7-14 11:14
String concatenation is implemented through the StringBuffer class and its append method.也就是说在java内部的确是对+进行了重载,在处理String的过程中要创建一个StringBuffer对象,用StringBuffer对象的append方法对字符串进行连接,最后调用toString方法返回String字符串。
String s = "a " + "b " + "c ";
就等于String s = "abc ";
String a = "a ";
String b = "b ";
lss很透彻。
String c = "c ";
String s = a + b + c;
这个就不一样了,好像最终结果类似于:
StringBuffer temp = new StringBuffer();
temp.append(a).append(b).append(c);
String s = temp.toString();作者: 李思静 时间: 2012-7-14 11:15
一共创建了6个对象,老毕说过,字符串一旦创建,内容不可改变。