今天写了这样一段java代码:
PostValue.java
public class PostValue{
public PostValue(String s){
s =”has changed”;
}
public static void main(String args[]){
}
}
Main.java
Import file.PostValue;
public class Main{
public static void main(String args[]){
String stringTemp =”original”;
PostValue p =new PostValue(stringTemp);
System.out.println(stringTemp);
}
}
本以为输出的会是”has changed”,但是结果是”original”,虽然早就知道java传参是传地址的,但是还是第一反应是传参出了问题,网上查了一下,在http://www.iteye.com/topic/12961学习到java传参的详细原理,但我这段代码的问题不是出在传参,而是String类型数据一旦初始化是不可变的,官方文档的解析:
publicfinal class String
Strings are constant; their values cannot bechanged after they are created. String buffers support mutable strings. BecauseString objects are immutable they can be shared.
而StringBuffer是可变的,所以修改上面的代码为:
PostValue.java
public class PostValue{
public PostValue(StringBuffer s){
s.append(“has changed”);
}
public static void main(String args[]){
}
}
Main.java
Import file.PostValue;
public class Main{
public static void main(String args[]){
StringBuffer stringTemp =new StringBuffer(“”);
PostValue p =new PostValue(stringTemp);
System.out.println(stringTemp.toString());
}
}
当然StringBuffer还有其他的函数例如replay(),可以不是附上的形式,可以直接覆盖原数据,可使用时再查阅。