值传递和引用传递

运行下面程序,输出的结果为什么是AB,B?

public class Foo {
       public static void main(String[] args) {
              StringBuffer a=new StringBuffer("A");
              StringBuffer b=new StringBuffer("B");
              operator(a,b);
              System.out.println(a+","+b);
       }
       public static void operator(StringBuffer x,StringBuffer y){
              x.append(y);
              y=x;
       }
}

这里涉及到了Java当中方法的值传递。Java中方法调用是值传递,(Java当中的)传值其实是拷贝引用而非拷贝对象,不管引用怎么变,只要不调用引用的方法,对象的任何属性都不会变。
1 public class Foo {
2        public static void main(String[] args) {
3               StringBuffer a=new StringBuffer("A");
4               StringBuffer b=new StringBuffer("B");
5               operator(a,b);
6               System.out.println(a+","+b);
7        }
8        public static void operator(StringBuffer x,StringBuffer y){
9                x.append(y);
10              y=x;
11       }
12 }

第九行代码调用了引用的方法,因此a的值发生了变化;而第十行代码只是交换了x和y的值,这样并不会改变引用的值。

【如若还是不明白的话,请读读这段话:
    Java中参数传递实际上只有值传递一种,对象作为参数时实际上是将对象的地址(4字节的值)传递到方法内部,通过该地址即可找到相应的对象.因此在方法内部对对象地址的改变是不会改变对象本身的属性.只有通过地址找到该对象然后改变对象的属性才会使对象本身发生改变.
】


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值