string 是只读字符串,即引用堆区中的字符串不能被改变
举例:
String str ="abc";
str = "bcd";
对于str 来说,abc字符串并没有被改变,而是开辟了新的空间——bcd。再把bcd的空间地址赋给了str。所以str打印结果是bcd。但是并不意味着abc的值变了。
这是直接赋值的方式,如果通过java传参,调用方法的形式改变str,如:
String str = "abc"
fun(str);
public void fun(String str){
str = "efg"
}
这样,str 的值其实没有变,打印出来还是abc,因为这里是进行的值传递,这里的参数str 只是一个拷贝,所以修改str的值其实是没变的。
java中只有值传递。
但是,因为StringBuilder和StringBuffer是可以修改string字符串对象的值的,所以下面代码:
StringBuilder str = new StringBuilder("123");
change(str);
System.out.println(str);
public static void change(StringBuilder str){
str.append("345");
}
str的内容就变成了123456.其中append是个增加字符串数组内容的方法。
StringBuffer和StringBuilder的区别:
StringBuilder是在单线程环境下的方法,没有被synchronized修饰,其他的与StringBuffer一样