java 方法中的形参传值

今天看到一个String传值问题,才发现以前的认知都是错的,为防止以后忘记,写下来。
先来看一个问题:

public static void main(String[] args){
    String a="abc";
    String b="bcd";
    change(a,b);
    System.out.print("a为:"+a+"\n");
    System.out.print("b为:"+b);
}
public void change(String a,String b){
    a=b;
    b=a+b;
}

这个输出结果是什么呢?
结果是: a为:abc
b为:bcd
这事为什么呢?不是a和b经过change方法改变了值吗?
首先这里要弄清楚一个概念:String类型的值是不可变的,也就意味String类型在创建后这个对象就是不可变的。所以a和b的值变没变就看它引用的String对象变没变。而String类型在方法中作为参数时,和基本类型一样传递的是他的值,也就是在change方法中a和b只是接受到了实参a和b的值而不是它的引用,即change(a,b)就是change(“abc”,”bcd”);所以这个方法并没有改变原来的a和b的引用对象,他们引用还是之前的”abc”和”bcd”。所以a和b的输出结果都不回变。在这里就要重点说明一点,String类型在方法中传递的是值而不是引用。所以一般在方法中进行操作都不回影响原来的值。
要是StringBuffer呢?

   public static void main(String[] args){
    StringBuffer a=new StringBuffer("abc");
    StringBuffer b=new StringBuffer("bcd");
    change(a,b);
    System.out.print("a为:"+a+"\n");
    System.out.print("b为:"+b);
}
public void change(StringBuffer x,StringBuffer y){
    x=y;
    y=x.append(y);
} 

输出结果:a为:abc
b为:bcdbcd
由于除了String以外的引用类型对象在传递参数时传递的是引用(本质上还是值,就是a和b的引用值),也就是这里有四个引用,a,b,x,y。其中a,x引用的对象为”abc”,b,y引用的对象为”bcd”;执行”x=y”时,x引用的对象由”abc”变成了”bcd”,此时b,x,y都是引用同一个对象”bcd”;a还是引用”abc”对象。执行”y=x.append(y)”时:由于x和y引用的是”bcd”对象,所以执行完后对象”bcd”变成了”bcdbcd”,但x,y,b还是引用此对象,所以输出的b为:bcdbcd;而a为:abc。
综上所述,java方法参数传递中传递的都是值,但基本类型和String传递的就是基本类型的值,而引用类型传递的值是引用,所以在方法中要看引用变没变,所引用的对象变没变。
希望上述对各位有所帮助,在下菜鸟一枚,欢迎大牛指教。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值