String类型传参不改变原数据问题



今天写了这样一段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(),可以不是附上的形式,可以直接覆盖原数据,可使用时再查阅。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值