String对象创建后,其中的内容是不会再改变的。
String s=new String();
这句就创建了一个null的字符串s,我们可以改变它的引用而不能改变其内容,如:
s="First";
这时,s就指向了“First”这个对象。
s=s+" second.";
这时的s的值是“First second.”,s又重新指向了这个字符串。这样就把前两个对象交给了垃圾回收器去处理了。
还有关于相同字符串的引用地址相等的问题。如:
String s1="Java,I like";
String s2="Java,I like";
这时s1==s2是的值为true,这表明这两个对象的引用是相同的,即s1,s2都指向了同一个String对象。
这是由于Java采用了String池,将直接声明的字符串做为常量放在String池里,如果在该池里有你要声明的字符串,JVM就直接引用它了,就不会再去创建新的对象,这就是s1、s2的同一个引用的原因。如果用new创建String对象,JVM就会将该对象放入普通内存中。
如果构造方法是这样的:
String s3=new String("Java,I like");
String s4=new String("Java,I like");
这时s3==s4的值就为false了,这表明这是两个不同的对象,各自有自己的地址。
在使用String对象做为参数的方法对String对象作修改是不会影响原来的数据,如:
String s="UnChange";
static void change(String s){
s="Change";
}
change(s);
System.out.println(s);
这时控制台输出的是:UnChange
这说明这样是无法对原有的String对象进行修改。若要修改就只能使用StringBuffer对象。