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

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

目录

前言:

1、什么是值拷贝?

2、什么是引用赋值?

3、例子:

(1)代码1:值拷贝

(2)代码2:引用赋值

4、代码纠正:



前言:

打卡!打卡!

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


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

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


相关文章
|
19天前
|
Java 测试技术 程序员
Java零基础(23) - Java赋值运算符,了解一下!
【9月更文挑战第2天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
38 11
|
30天前
|
Java 索引
Java系列 之 Java复制(拷贝)数组的4种方法:arraycopy()方法、clone() 方法、copyOf()和copyOfRan
这篇文章介绍了Java中数组复制的四种方法:`Arrays.copyOf()`、`Arrays.copyOfRange()`、`System.arraycopy()`和`clone()`方法,以及它们的使用场景和示例代码。
|
1月前
|
XML Java 数据格式
基于Java+freemarker实现动态赋值以及生成Word文档
使用Java和Freemarker技术实现动态数据填充到Word文档模板并生成新的Word文档。
93 0
基于Java+freemarker实现动态赋值以及生成Word文档
|
2月前
|
Java 测试技术 开发者
day15:Java零基础-赋值运算符
【7月更文挑战第15天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
25 1
|
3月前
|
缓存 Java 数据库连接
java面试题目 强引用、软引用、弱引用、幻象引用有什么区别?具体使用场景是什么?
【6月更文挑战第28天】在 Java 中,理解和正确使用各种引用类型(强引用、软引用、弱引用、幻象引用)对有效的内存管理和垃圾回收至关重要。下面我们详细解读这些引用类型的区别及其具体使用场景。
42 3
|
2月前
|
Java 运维
开发与运维引用问题之软引用又在Java特点如何解决
开发与运维引用问题之软引用又在Java特点如何解决
34 0
|
3月前
|
Java
java方法引用::
java方法引用::
|
3月前
|
Java
“深入探讨Java中的对象拷贝:浅拷贝与深拷贝的差异与应用“
“深入探讨Java中的对象拷贝:浅拷贝与深拷贝的差异与应用“
|
4月前
|
存储 Java
滚雪球学Java(41):Lambda表达式和方法引用:提高代码可读性和简洁性的神器
【5月更文挑战第16天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
40 2
滚雪球学Java(41):Lambda表达式和方法引用:提高代码可读性和简洁性的神器
|
3月前
|
Java
Java 基础深度解析:变量与常量的声明、赋值与初始化的权威指南
【6月更文挑战第14天】Java编程中的变量和常量是基础关键。声明变量如`int age;`,赋值与初始化可在声明时或后续代码中完成。常量用`final`修饰,如`public static final double PI = 3.14159;`,且只能赋值一次。变量命名应具描述性,常量值设定后尽量不变,注重代码的可读性和可维护性。熟练掌握这些将有助于编写高质量Java程序。
49 4