JAVA参数传递类型

结论: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对象。

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 盛唐诗酒谪仙人 余光中诗云“酒入愁肠,三分啸成剑气,七分化作月光,绣口一吐,就是半个盛唐。”诗仙李白,一叶扁舟,一...
    鹤鸣川阅读 3,749评论 2 1
  • 0.官网教程 https://neo4j.com/docs/operations-manual/3.1/ ====...
    韩维思阅读 7,102评论 0 0
  • 碧翠满目映光辉, 幽香几缕扑鼻来。 转睛四顾香何处? ...
    醉梦清莲阅读 2,981评论 1 2

友情链接更多精彩内容