Java传参是传值还是传址? 转一篇很精练的文章

转自:http://hi.baidu.com/cuiyueboke/blog/item/4be6bfec85f0e53f26979113.html


今天回想起来Java考试时有这么一道题,先不说别的,先看看下面这段代码:public class MyDemo {
          public MyDemo(){ }
          public static void operate(StringBuffer x,StringBuffer y){
          x.append(y);
          y=x;
          System.out.println(x+","+y);
       }
       public static void main(String[] args) {
          StringBuffer a=new StringBuffer("A");
          StringBuffer b=new StringBuffer("B");
          operate(a,b);
          System.out.println(a+","+b);
       }
}

就是这道题,可算给弄明白了,如果先看运行结果的话是:
AB,AB
AB,B
如果参数是简单类型的那么传递的就是 值,比如 int char 等等
如果参数是对象类型(引用类型)那么传递的就是 地址(引用)!

很明显这里传递的是地址(引用)传递2个StringBuffer 对象!

注意啦:
x 会指向 a 所指向的内存(可以理解为都指向A),y 会指向 b 所指向的内存,(可以理解为都指向B)
x.append(y); //这句话把 y 指向的值追加给x指向的值,这个时候x 和a 指向的内存都是AB,y指向的内存仍然是B
y=x;//这句话就是把 x 的值 附值给 y, 附的是地址!

这样 a,y,x 同时值向 AB,b仍然指向 B

System.out.println(x+","+y); 这里所以打印 AB,AB
System.out.println(a+","+b); 这里所以打印 AB ,B


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值