java小记:Java中String引用传参
我们知道在java中字符串(Stirng)对象和其他对象不太一样,是不可变的,所以再作为参数传递的时候和基本类型一样,都是“值传参”,要想达到“引用传参”的效果,就要使用StringBuffer/StringBuilder。
值传参和引用传参的例子就不过多废话了,网上随便都可以查到,可能需要注意的一点就是,在引用传参的函数中,对字符串进行修改的时候绝对不能是对参数再次初始化(new),简单看个例子:
public static void main(String[] args){ StringBuffer sbr = new StringBuffer("test"); System.out.println(sbr.toString()); testStringParam1(sbr); System.out.println(sbr.toString()); testStringParam2(sbr); System.out.println(sbr.toString()); } public static void testStringParam1(StringBuffer sbr){ //修改引用参数 sbr.delete(0,sbr.capacity()).append("test111"); } public static void testStringParam2(StringBuffer sbr){ //从新初始化引用参数 sbr = new StringBuffer(sbr.append("222")); }
一个方法(testStringParam1),引用参数被改成了“test111”,此时在main方法中字符串已经从“test”变成了“test111”;
第二次输出是调用第二个方法(testStringParam2),在该方法使用new对引用参数重新初始化了,这样并不能改变外部的字符串,也就失去了引用传参的效果。