我在一本书上看到这样一句话:
"String类是用来表示字符串常量的,用它创建的每个对象都是字符串常量,一经建立便不能修改."
但是我写了一个程序,确可以再为String常量赋新的值,为什么?它既然是常量为什么还可以为它赋新的值.
程序如下:
public class StringClass {
public static void main(String[] args) {
String a=new String("你好!");
System.out.println(a);
a="lipengxing";
System.out.println(a);
a=new String("小心");
System.out.println(a);
}
}
"String类是用来表示字符串常量的,用它创建的每个对象都是字符串常量,一经建立便不能修改."
但是我写了一个程序,确可以再为String常量赋新的值,为什么?它既然是常量为什么还可以为它赋新的值.
程序如下:
public class StringClass {
public static void main(String[] args) {
String a=new String("你好!");
System.out.println(a);
a="lipengxing";
System.out.println(a);
a=new String("小心");
System.out.println(a);
}
}
而楼主说的重新赋值实际上创建了一个新的String对象
是字符串不能改
如你的"你好","小心","lipengxing"它们是不能改的
当你把a赋给另外的字符串,其时是让a指向另外的内存区
中的享元模式有详细的阐述
StringBuffer
字符串变量可以指向一个字符串,也可以改变为指向另一个字符串,这就是变量本身的变化,而字符串本身不可以修改,当一个字符串变量从指向一个字符串改为指向另一个时候,原来的字符串变成内存垃圾被回收。在StringBuffer中,指向的字符串本身也是可以修改的。
如果我们编写下面的代码:
String ball = "Hello";
ball = ball + "there.";
ball = ball + "How are you ?";
这个例子反复产生了新的String对象,这也就意味着,字符数组必须反复的复制,这可能会对系统的性能产生负面的影响,
更好的选择则是使用StringBuffer对象和append()方法,然后利用String类的toString()方法得到一个String对象。