栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java 值传递和引用传递

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java 值传递和引用传递

一.首先要了解的是基本数据类型和引用数据类型
对于基本数据类型,进行数值的赋值的时候,是将这个值直接存放到这个变量当中
而对于引用数据类型,进行数值的赋值的时候,是将这个变量引用的地址所对应的值改变

再调用方法的时候,实际上就是赋值的操作
这里有个例子

 public static void main(String[] args) {
        int num=1;
        String str="abc";
        char[] ch={'a','b','c'};
        change(num,str,ch);
        System.out.println(num);
        System.out.println(str);
        System.out.println(ch);
        foo(ch);
        System.out.println(ch);

    }
    public static void change(int n,String s,char[] c)
    {
        char[] b={'1','2','3'};
        n=2;
        s="bcd";
        c=b;
    }
    public static void foo(char[] c)
    {
        c[0]='g';
    }

输出结果如下:

对于num来说这就是最经典的值传递
将num的值传递给change方法里的n,在这个方法中实际上是对于n的值的改变,而没有对num的值改变

对于str来说虽然是引用类型,但是!在change方法里它的值发生了改变,它就会在堆里面重新开辟一个新的空间,也就是说在change方法里面,s变量实际上是String s= new String(“bcd”);

对于字符数组char[] ch在change方法里跟str相同,都是对于原先的数组长度发生了改变,从而在堆里面重新开辟一个新空间。
而在foo方法里,ch是将它的引用传递给c,然后c在foo方法直接将索引对应的值改变,并没有将原有的数组改变,所以它们就是共用一个堆空间,ch因此改变了它的ch[0]的值。


总结:
值传递:实际上是在方法里创建了一个副本用来存放值,并没有与实际参数有任何关系
引用传递:实际上是在方法里将实参的地址传递给形参,它们就共用一个地址(在没有改变长度的情况下,改变长度就会new一个堆空间),形参修改值就会将实参的值一起改变。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/439754.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号