JAVA参数传递类型

2019-09-25  本文已影响0人  Carter强

结论:JAVA中参数传递的方式只有一种方式,即值传递;


Java中有俩种数据类型:一:基本数据类型:即byte,short,int,long,float,double,char,boolean

                                              二:复合数据类型:即String,StringBuffer,ArrayList等

Demo1:对于基本数据类型,做如下Demo:

public static void main(String []args){

        int a =5 ;

       System.out.println("初始的a的值为:"+a);

       changeInt(a);

       System.out.println("调用changeInt方法后a的值为:"+a);

}

public static void changeInt(int a){

        a =8;

}

result : 初始的a的值为:5

              调用changeInt方法后a的值为:5

我们看到,局部变量a被当作参数传入changeInt方法后,并没有改变其原来的值,这是因为传入的参数其实是a的值的一份拷贝,所以说无论changeInt方法如何使用a的值,原来的a的值都不会受到任何影响。

Demo2:对于复合数据类型(挑选StringBuffer作为实例测试),做如下Demo

public static void main(String []args){

       StringBuffer sbf =new StringBuffer("Hello");

       System.out.println("初始化StringBuffer实例sbf的值为:"+sbf);

       changeStringBuffer(sbf);

System.out.println("调用changeStringBuffer方法后sbf的值为:"+sbf);

}

public static void changeStringBuffer(StringBuffer sb){

       sb.append(" world");

}

运行结果:初始化StringBuffer实例sbf的值为:Hello

                     调用changeStringBuffer方法后sbf的值为:Hello world

我们发现,局部变量sbf的值在经changeStringBuffer方法调用后其值发生了改变 , 明明是值传递,为什么会发生这样的事情呢?查阅资料后,sbf 实际是一个引用,而该引用存的是实际的sbf对象在内存中的地址,在向changeStringBuffer传递参数时实际传的是引用的副本。所以说在changeStringBuffer方法内,局部变量sb引用指向的地址和sbf引用指向的地址是同一个地址即同一个对象,当changeStringBuffer方法内对sb指向的对象做了修改时,也就是改变了sbf指向的对象,所以说当我们输出sbf对象的值时,我们发现它被修改了。

Demo3: 复合数据类型中特殊情况之String(String类型的参数作为参数传递不会改变其值)

String 是final类型,并且是不可变的。

String s = "hello"    <=> String  s = new String("hello")   

所以说,每次给String类型的变量赋值其实都在重新创建一个对象,并不会影响原先的String对象。

其最终的参数传递的结果和基本数据类型的参数传递结果是一样的。

上一篇 下一篇

猜你喜欢

热点阅读