千家信息网

Java是值传递还是引用传递

发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,本篇内容主要讲解"Java是值传递还是引用传递",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Java是值传递还是引用传递"吧!1.值类型通俗意义上来说,所
千家信息网最后更新 2025年11月08日Java是值传递还是引用传递

本篇内容主要讲解"Java是值传递还是引用传递",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Java是值传递还是引用传递"吧!

1.值类型

通俗意义上来说,所谓的值类型指的就是 Java 中的 8 大基础数据类型:

  • 整数型:byte、int、short、long

  • 浮点型:float、double

  • 字符类型:char

  • 布尔类型:boolean

从 JVM 层面来讲:所谓的值类型指的是在赋值时,直接在栈中(Java 虚拟机栈)生成值的类型,如下图所示:

2.引用类型

引用类型是指除值类型之外的数据类型,比如:

  • 接口

  • 数组

  • 字符串

  • 包装类(Integer、Double...)

从 JVM 的层面来讲,所谓的引用类型是指,在初始化时将引用生成栈上,而值生成在堆上的这些数据类型,如下图所示:

3.值传递

值传递(Pass By Value)指的是方法传参时,传递的是原内容的副本,因此对副本进行如何修改都不会影响原内容。

实现代码如下:

public class PassTest {     public static void main(String[] args) {         int age = 18;         System.out.println("调用方法前:" + age);         intTest(age);         System.out.println("调用方法后:" + age);     }      private static void intTest(int age) {         age = 30;         System.out.println("方法中修改为:" + age);     } }

程序的执行结果为:

调用方法前:18

方法中修改为:30

调用方法后:18

从上述结果可以看出,在方法中修改参数并未影响原内容,我们把这种传参方式称之为值传递。

4.引用传递

引用传递(Pass By Reference)指的是方法传参时,传递的是参数本身,因此对参数进行任意修改都会影响原内容。

模拟"引用传递"的实现代码如下:

public class PassTest {     public static void main(String[] args) {         char[] name = {'磊', '哥'};         System.out.println("调用方法前:" + new String(name));         paramTest(name);         System.out.println("调用方法后:" + new String(name));     }     private static void paramTest(char[] n) {         n[1] = '神';         System.out.println("方法中修改为:" + new String(n));     } }

程序的执行结果为:

调用方法前:磊哥

方法中修改为:磊神

调用方法后:磊神

从上述的结果可以看出在 paramTest 方法中修改了参数之后,在 main 方法中再打印参数时,发现参数的值也跟着发生了改变,那么似乎我们可以得出结论,Java 中貌似也有"引用传递",然而实事并如此,我们接着看。

5.真假"引用传递"

我们给上面的代码添加一行,如下所示:

public class PassByValue {     public static void main(String[] args) {         char[] name = {'磊', '哥'};         System.out.println("调用方法前:" + new String(name));         paramTest(name);         System.out.println("调用方法后:" + new String(name));     }     private static void paramTest(char[] n) {         n = new char[2]; // 添加此行代码         n[1] = '神';         System.out.println("方法中修改为:" + new String(n));     } }

程序的执行结果为:

调用方法前:磊哥

方法中修改为:神

调用方法后:磊哥

从上述结果可以看出,当我们在 paramTest 方法中添加 new char[] 之后,"引用传递"就突然变值传递了?为什么?

这是因为,在 Java 语言中本质上只有值传递,也就说 Java 的传参只会传递它的副本,并不会传递参数本身。

前面那个带引号的"引用传递"其实只是传递了它的引用副本,如下图所示:

所以我们在调用 new char[] 之后,可以看出 n 对象有了新地址,而原内容并未被修改,如果按照引用传递的思路来看的话,不管执行任何方式的修改都会改变原内容,因此我们可以更加确认 Java 语言中只有值传递,如下图所示:

到此,相信大家对"Java是值传递还是引用传递"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

方法 类型 内容 参数 结果 代码 副本 还是 数据 程序 影响 生成 只有 字符 层面 方式 语言 学习 实用 更深 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 如何维护我国网络安全 精益软件开发管理之道pdf 工行软件开发中心上研 四川成都服务器公司云主机 重庆和贵州交界的服务器 南通专业联想服务器服务商 个人服务器需要安装dns吗 义乌app软件开发公司推荐 软件开发流程与测试 废物利用服务器硬盘 全国职业技能大赛网络安全管理员 访问数据库的权限分类 人力资源需要会数据库吗 何为软件开发方法 数据库中的知识发现的简称是 怀柔区正规软件开发要求 山东港口集团软件开发工作干什么 2022江西高考志愿数据库 数据库怎么给表添加主键约束 php电商数据库 天津正规软件开发设计欢迎咨询 jdbc连接数据库传参 网络安全公司的工作内容 赛亚网络安全布局 绝地求生怎么连接其他服务器 网络安全和计算机视觉 网络安全现场执法标准 蚌埠网络安全工程师 德国网络安全技术专业排名 数据库试用申请书单位
0