Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【java筑基】——为什么java中方法的参数传递机制没有引用传递

【java筑基】——为什么java中方法的参数传递机制没有引用传递

作者头像
半旧518
发布于 2022-10-26 10:28:27
发布于 2022-10-26 10:28:27
66400
代码可运行
举报
文章被收录于专栏:半旧的技术栈半旧的技术栈
运行总次数:0
代码可运行

前 言 🍉 作者简介:半旧518,长跑型选手,立志坚持写10年博客,专注于java后端 ☕专栏简介:深入、全面、系统的介绍java的基础知识 🌰 文章简介:本文将介绍为什么java中方法的参数传递机制没有引用传递,建议收藏备用,创作不易,敬请三连哦

值传递是指在调用函数或者方法时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。

所谓引用传递是指在调用函数或者方法时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。

Java中的方法不能够独立存在,调用方法必须通过类或者对象来作为主调者。方法中如果声明了形参,则调用方法时必须给这些形参指定参数值,调用方法时实际传递的参数被称为实参。

Java使用值传递,将实际参数的副本传入方法而实际的参数本身不会受任何影响。

这就像真孙悟空毫毛变了假孙悟空去打妖怪。基本数据类型和引用数据类型的参数传递机制都是值传递。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class DataWrap {
	int a;
	int b;
}

public class ReferenceTransferTest {
	public static void swap(DataWrap dw) {
		int temp;
		temp = dw.a;
		dw.a = dw.b;
		dw.b = temp;
		//输出swap方法的a:9swap方法的b:6
		System.out.println("swap方法的a:" + dw.a + "swap方法的b:" + dw.b);
	}

	public static void main(String[] args) {
		DataWrap dw = new DataWrap();
		dw.a = 6;
		dw.b = 9;
		swap(dw);
		//交换之后的a成员变量:9交换之后的b成员变量:6
		System.out.println("交换之后的a成员变量:" + dw.a + "交换之后的b成员变量:" + dw.b);
	}
}

这个代码会造成错觉,好像传递的是参数本身,实际上,main方法是传递了一个副本引用给swap方法,swap方法中的副本引用修改了堆内存的DataWrap对象。引用数据类型的参数传递机制仍然是值传递。

为了验证我们的观点,我们可以把swap()方法的最后一行插入下列语句。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dw=null;

最后main()方法输出的值仍然没有发生改变(9,6),说明main()方法中dw变量和swap()方法中的dw变量并不是同一个变量。java中方法使用引用变量作为形参仍然是值传递,传递的是参数副本。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java Review (七、面向对象----方法深入)
方法是类或对象的行为特征的抽象,方法是类或对象最重要的组成部分, 但从功能上来看,方法完 全类似于传统结构化程序设计里的函数 值得指出的是, Java里的方法不能独立存在 ,所有的方法都必须定义在类里 ,方法在逻辑上要么属于类,要么属于对象。
三分恶
2020/07/16
5060
java之方法的参数传递(值传递和引用传递)
基础数据类型参数传递方式只有一种:值传递。即将实际参数值的副本(复制品)传入方法内,而参数本身不受影响;
西西嘛呦
2020/08/26
2.1K0
Java到底是引用传递还是值传递?
首先回顾一下在程序设计语言中有关将参数传递给方法(或函数)的一些专业术语。 按值调用(call by value)表示方法接收的是调用者提供的值,而按引用调用(call by reference)表示方法接收的是调用者提供的变量地址。一个方法可以修改传递引用所对应的变量值,而不能修改传递值调用所对应的变量值。它用来描述各种程序设计语言(不只是 Java)中方法参数传递方式。
黑洞代码
2021/01/14
8120
Java到底是引用传递还是值传递?
【Java】Java中是值传递还是引用传递的?
在Java当中一个一个方法的调用都是一个入栈的过程,main方法首先入栈,当调用了swap方法的时候swap方法入栈,此时主函数传给swap函数的a和b都会被在swap方法中拷贝出一个副本出来,副本的值的交换不影响主函数中a和b的值。
哈__
2024/04/08
3180
【Java】Java中是值传递还是引用传递的?
C++参数传递
C++和Java、C#语言在参数传递的时候,最大的不同就是在 C++ 中,除非显式通过指针或引用传递,否则所有变量都通过值传递。在 C# 中,除非显式通过具有 ref 或 out 参数修饰符的引用传递,否则类通过引用传递,而结构通过值传递。Java中类通过引用传递,基本数据类型通过值传递。
卡尔曼和玻尔兹曼谁曼
2019/01/25
8440
C++参数传递
值传递与引用传递
“哥,说说 Java 到底是值传递还是引用传递吧?”三妹一脸的困惑,看得出来她被这个问题折磨得不轻。
沉默王二
2021/06/16
1.2K0
值传递与引用传递
Golang函数参数的值传递和引用传递
值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数
仙人技术
2021/08/31
2.5K0
Golang函数参数的值传递和引用传递
java杂谈之方法参数的前世今生
此方法是校验cellId入参是否合法,然后去掉不合法的cellId,通过UT发现报错,原来是for循环的过程中删除元素,会报ConcurrentModificationException.
你呀不牛
2021/05/28
4580
这一次,让你彻底理解Java的值传递和引用传递!
学过Java基础的人都知道:值传递和引用传递是初次接触Java时的一个难点,有时候记得了语法却记不得怎么实际运用,有时候会的了运用却解释不出原理,而且坊间讨论的话题又是充满争议:有的论坛帖子说Java只有值传递,有的博客说两者皆有;这让人有点摸不着头脑,下面我们就这个话题做一些探讨,对书籍、对论坛博客的说法,做一次考证,以得出信得过的答案。
Java团长
2019/06/26
8720
这一次,让你彻底理解Java的值传递和引用传递!
C++一分钟之-函数参数传递:值传递与引用传递
在C++编程中,函数参数的传递方式直接影响着程序的效率与数据的安全性。值传递与引用传递是最基本的两种参数传递方式,它们各有特点,适用于不同的场景。本文将深入浅出地探讨这两种传递方式的原理、差异、常见问题及避免策略,并通过代码示例加以说明。
Jimaks
2024/06/21
4540
C++一分钟之-函数参数传递:值传递与引用传递
Java中的值传递与引用传递详解
方法调用是编程语言中非常重要的一个特性,在方法调用时,通常需要传递一些参数来完成特定的功能。Java语言提供了两种参数传递的方式:值传递和引用传递。
良月柒
2019/03/20
2.1K0
Java中的值传递与引用传递详解
面试专题:值传递和引用传递的问题
在Java编程中,参数传递有两种方式:值传递和引用传递。这两种传递方式决定了变量在方法内部的变化如何影响原始变量。本文将深入探讨这两种传递方式的概念、应用和注意事项,并且从面试题入手,分栈堆内存的情况。
小明爱吃火锅
2023/12/26
3880
说说Java到底是值传递还是引用传递
首先,我们必须要搞清楚,到底什么是值传递,什么是引用传递,否则,讨论 Java 到底是值传递还是引用传递就显得毫无意义。
沉默王二
2020/04/23
4580
说说Java到底是值传递还是引用传递
Java-值传递和值引用
参考:https://mp.weixin.qq.com/s/Qp6Cc0mlRLnrToNy5-3zeg java的值传递和值引用是一个普通但重要的内容,今天我们依次来了解一下。
android_薛之涛
2019/01/03
1.7K0
【Java】方法参数传递机制分析:传值与传引用
Java 的参数传递机制基于 传值,即方法接收参数时,会将实际传递给它的值复制给形参。这意味着,形参的变化不会影响到原始实参。这种传值机制对于基本数据类型(如 int, float, boolean 等)尤为明显。
CSDN-Z
2025/02/21
1160
【Java】方法参数传递机制分析:传值与传引用
细说值传递、引用传递和地址传递
形式参数:是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数。
闫同学
2023/10/14
2440
【面试题精讲】引用传递是怎么样的?
引用传递(pass by reference)是一种参数传递方式,它与值传递(pass by value)不同。在引用传递中,当我们将一个变量作为参数传递给方法时,实际上是将该变量的引用地址传递给了方法。
程序员朱永胜
2023/10/14
3730
值传递OR引用传递?大部人都答错了!
Java 是值传递还是引用传递?这是 Java 中比较基础的一道常见面试题,但对于这道问题的大部分答案都是错的,大部人会这样回答这个问题:
磊哥
2024/09/04
2180
一文读懂 Python 值传递和引用传递
👋 你好,我是 Lorin 洛林,一位 Java 后端技术开发者!座右铭:Technology has the power to make the world a better place.
Lorin 洛林
2024/02/26
2.4K9
一文读懂 Python 值传递和引用传递
值传递OR引用传递?大部人都答错了!
Java 是值传递还是引用传递?这是 Java 中比较基础的一道常见面试题,但对于这道问题的大部分答案都是错的,大部人会这样回答这个问题:
磊哥
2024/09/05
560
值传递OR引用传递?大部人都答错了!
相关推荐
Java Review (七、面向对象----方法深入)
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文