Java 数据类型怎么理解基本数据类型在数组作为参数传递时的按值传递本质

千敏同学_1837

千敏同学_1837

2026-08-25

885人浏览

原创

数组参数传递的是引用副本,但基本类型元素操作本质是值传递:每次arr[i]读写都是对堆中固定位置的值拷贝,因位置共享故修改对外可见。

java 数据类型怎么理解基本数据类型在数组作为参数传递时的按值传递本质

Java 中数组作为参数传递时,基本数据类型元素的“按值传递”本质,关键不在于数组本身怎么传,而在于数组里存的是什么、怎么被访问和修改。

数组变量传递的是引用副本,但元素操作仍是值传递

数组是对象,所以数组变量(如 int[] arr)作为参数传递时,传的是该数组对象在堆内存中的地址的副本。形参和实参指向同一个数组对象——这点没错。但注意:真正被读写的是数组里的每个元素,而这些元素如果是基本类型(比如 int),它们本身存储在堆中数组对象内部,每次读取或赋值,都是一次独立的值拷贝行为。

例如:

  • arr[0] = 100; 这行代码不是“把引用传进去再改引用”,而是:通过引用定位到数组对象 → 找到下标为 0 的内存槽 → 把整数 100 的值复制进去;
  • int x = arr[0]; 同样是把那个槽里的 int 值复制给 x,后续改 x 不会影响 arr[0]。

为什么修改元素能影响原数组?不是和“值传递”矛盾吗?

不矛盾。这里容易混淆的点在于把“传递方式”和“作用位置”混为一谈:

Java Maven Code Review
Java Maven Code Review

审查Java Maven项目(ZIP压缩包或GitLab仓库URL),检查代码规范、命名、模块边界、可维护性问题以及重复代码。

下载
  • 方法外定义 int[] a = {1, 2, 3};,a 是一个引用,指向堆中一块连续内存(存着三个 int 值);
  • 调用 change(a),传入的是这个引用的副本,但它仍指向同一块堆内存;
  • 在方法内执行 arr[0] = 999;,实际是直接往那块共享的堆内存的第一个位置写入新值 —— 写的是原始位置,不是副本位置。

所以“能改到外面”,靠的是共享堆内存地址,而不是“传递了引用类型所以自动可变”。本质上,每个 arr[i] 的读写,对基本类型来说,仍是值的载入与存储。

对比:如果数组里存的是包装类(如 Integer),会怎样?

这能反向印证本质:

  • Integer[] nums = {new Integer(1), new Integer(2)};
  • 传入方法后,nums[0] = new Integer(999); —— 这是把新对象的引用赋给数组的第 0 个槽;
  • 因为 Integer 是不可变对象,你无法像改 int 那样“就地修改值”,只能换引用;
  • 而这个赋值操作,改的仍然是数组对象内部那个槽位的引用值(也是按值传递的逻辑)。

可见,无论元素是基本类型还是引用类型,数组内部的每个槽位存储的都是“值”:基本类型的值,或引用类型的地址值。所有对 arr[i] 的操作,底层都是对该槽位进行值的读/写。

一句话总结

数组作为参数,传递的是数组对象引用的副本;而数组中基本数据类型元素的“按值传递”,体现在每次对 arr[i] 的读取或赋值,都是对堆中某固定内存位置上的值做拷贝操作 —— 它不改变引用关系,只改变那个位置存的数;正因为位置是共享的,所以改了就立刻对外可见。

Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

9837

6

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

6982

9

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

2023.07.31

6172

8

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.01

1064

3

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.02

888

3

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

1296

5

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

2569

5

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

2023.08.03

19911

3

配置java环境变量
配置java环境变量

配置Java环境变量是为了让操作系统能够识别和使用Java的相关命令和功能。本专题为大家提供配置java环境变量相关文章,帮助大家解决问题。

2023.08.03

1155

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习