ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java 值传递和引用传递

2021-11-07 10:02:26  阅读:127  来源: 互联网

标签:char ch java String 传递 num 引用 str change


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

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

 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一个堆空间),形参修改值就会将实参的值一起改变。

标签:char,ch,java,String,传递,num,引用,str,change
来源: https://blog.csdn.net/qq_51194826/article/details/121171731

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有