(JAVA):“值拷贝”和“引用赋值”易错易混的地方。

导读:本篇文章讲解 (JAVA):“值拷贝”和“引用赋值”易错易混的地方。,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

目录

前言:

1、什么是值拷贝?

2、什么是引用赋值?

3、例子:

(1)代码1:值拷贝

(2)代码2:引用赋值 

4、代码纠正: 


前言:

(JAVA):“值拷贝”和“引用赋值”易错易混的地方。

 打卡!打卡!

今天看到这个容易混淆的地方,在这之前我都不知道、没注意,今天补上,当个笔记。

1、什么是值拷贝?

        简单来说就是复制,把第一个变量的值复制给第二个变量,改变第二个变量的值不会影响第一个变量的值。

2、什么是引用赋值?

        就是引用值,在堆中放有一堆数据,栈中的变量1和变量2去引用这个堆里的数据,改变任何一个变量的值,就是改变堆里的值,另一个变量的值也会随之而变。

3、例子:

(1)代码1:值拷贝

        int n1 = 10; //初始化
        int n2 = n1; //初始化
        
        n2 = 80; //改变n2的值

        System.out.println(n1); //结果为10
        System.out.println(n2); //结果为80

我们可以看到上面代码,值拷贝只改变一个变量,另一个变量不会改变。

(2)代码2:引用赋值 

        int[] arr1 = { 1, 2, 3}; //数组初始化
        int[] arr2 = arr1;  //数组初始化
        
        arr2[0] = 10; //改变第二个数组的第一个元素
        
        System.out.println(arr1[0]); //结果为10
        System.out.println(arr2[0]); //结果为10

        为什么两个结果都改变了呢?因为数组赋值(arr2 = arr1)是赋的地址,把arr1的地址给了arr2,两个数组使用的是同一个堆中的数据,所以无论改变哪个数据,另一个也会改变。

        那怎么使两个数组数据分开,互不干扰呢?前面说了,是因为使用了同一个堆,那我们再开辟一个堆出来不就解决问题了。

4、代码纠正: 

        int[] arr1 = { 1, 2, 3}; //赋初值
        int[] arr2 = new int[arr1.length]; //开辟新的堆,然后再赋值

        arr2[0] = 10; //改变其中一个值

        System.out.println(arr1[0]); //结果为1
        System.out.println(arr2[0]); //结果为10

        在开辟一个新的堆后,两个数组各自使用各自的堆,会不干扰,所以改变其中一个,另一个不会变了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/66233.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!