java中参数传递

我们知道,java中的参数传递分为值传递和引用传递。

对于基本类型和系统的对象如 String,Interger,Boolean,Double等,都是值传递;

而其他类型都是引用传递,这里就有个很有意思的问题,很多人搞不清楚,这里举个例子:

public class A{                                   public class A{
     public static void main(String arg[]){    public static void main(String arg[]){
       int[] a=new int[1];                                int[] a=new int[1];
       a[0]=3;                                               a[0]=3;
       method1(a);                                        method1(a);
       System.out.println(a[0]);                       System.out.println(a[0]);
     }                                          }
     public static void method1(int[] a){         public static void method1(int[] a){
      a[0]--;                                                  a=new int[0];
     }                                                           a[0]=4;
   }                                                            }
                                                              }

很显然在第一个例子中,执行一遍后a[0]的值变化了,而第二个例子中却没有变化,这是为什么呢?

因为第二个例子中,传进来的a又被指向了一个新的地址,开了一个新的空间,所以并不会改变main中的值。

由这个例子,就很好理解,我们想通过一个函数,传进一个对象,在函数中改变对象的指向,或者为对象新开辟一个空间都是不可行的;

传进来的对象参数只能改变其内部的属性值;

而如果我们要改变这个对象的话,就必须通过返回值来改变。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值