java的值传递

Java值传递 对于初学者来说,要想把这个问题回答正确,是比较难的。在第二天整理答案的时候,我发现我竟然无法通过简单的语言把这个事情描述的很容易理解,遗憾的是,我也没有在网上找到哪篇文章可以把这个事情讲解的通俗易懂。所以,就有了我写这篇文章的初衷。这篇文章中,我从什么是方法的实际参数和形式参数开始,给你讲解为什么说Java中只有值传递。 辟谣时间 关于这个问题,在StackOverflow上也引发过广泛的讨论,看来很多程序员对于这个问题的理解都不尽相同,甚至很多人理解的是错误的。还有的人可能知道Java中的参数传递是值传递 阅读详情

java中只有值传递,不存在引用传递

所谓值传递:就是将实际参数值的复制品传入方法,而实际参数值不会受到影响

1.基础数据类型传递

public class Test {
	public static void main(String[] args) {
		int a = 4;
		int b = 5;
		System.out.println("a变量原来值:"+a+"==="+"b变量原来值"+b);
		System.out.println(change(a, b));
		System.out.println("a变量交换后的值:"+a+"==="+"b变量交换后的值"+b);
		
	}
	public static String change(int a,int b) {
		int temp =a;
		a = b;
		b = temp;
		return "a经过change方法后的值是:"+a+"==="+"b经过change方法的值是:"+b;
	}
}

运行后结果:

a变量原来值:4===b变量原来值5
a经过change方法后的值是:5===b经过change方法的值是:4

a变量交换后的值:4===b变量交换后的值5

运行前后a,b变量的值未发生变化,只是a,b副本改变了


2.引用类型的参数传递

/**
	 * 
	 * 验证是否存在引用传递
	 * 方法名:main
	 * 创建人:array 
	 * 时间:2018年4月13日-下午8:24:44 
	 * 手机:13199657597
	 * @param args void
	 * @exception 
	 * @since  1.0.0
	 */
	
	public static void main(String[] args) {
		User user1 = new User();
		System.out.println("原来的id是:"+user1.getId()+"==="+"原来的username是:"+user1.getUsername()+"==="+"原来的密码:"+user1.getPassword());
		User user = new User();
		changeUser(user);
		User user2 = new User();
		System.out.println("变量的现在id是:"+user2.getId()+"==="+"变量现在的username是:"+user2.getUsername()+"==="+"变量现在的密码:"+user2.getPassword());
		
	}
	public static void changeUser(User user) {
		user.setId(1);
		user.setUsername("二狗");
		user.setPassword("aa");
		System.out.println("改变后的id是:"+user.getId()+"==="+"改变后的username是:"+user.getUsername()+"==="+"改变后的密码:"+user.getPassword());
	}
	public static String change(int a,int b) {
		int temp =a;
		a = b;
		b = temp;
		return "a经过change方法后的值是:"+a+"==="+"b经过change方法的值是:"+b;
	}
public class User {

	private String username = "array";
	private String password = "haha";
	private Integer id = 124;
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	
}

运行结果:

原来的id是:124===原来的username是:array===原来的密码:haha
改变后的id是:1===改变后的username是:二狗===改变后的密码:aa

变量的现在id是:124===变量现在的username是:array===变量现在的密码:haha

没错结果就是:引用传递,不存在的,在java中有且只有值传递

Java是值传递还是引用传递 形参即每个函数或者方法上的声明的占位符变量,如下代码整型的value实参:调用函数或方法时传的参数,如下代码就的func这个概念在c++c#中才有,简单来说就是将实参所指向的变量。 阅读详情

相关推荐

Java 值传递详解

很多程序设计语言(比如 C++、 Pascal )提供了两种参数传递的方式,不过,在 Java 中只有值传递。引用传递看似很好,能在方法内就直接把实参的值修改了,但是,为什么 Java 不引入引用传递呢?为了更强有力地反驳 Java 对引用类型的参数采用的不是引用传递,我们再来看下面这个案例!实际上,并不是的,这里传递的还是值,不过,这个值是实参的地址罢了!的副本,副本的内容无论怎么修改,都不会影响到原件本身。的互换只是拷贝的两个地址的互换罢了,并不会影响到实参。(实参)的地址,因此,它和。

些许风霜罢了 1062

Java 值传递

在 swap()方法中,a、b的值进行交换,并不会影响到num1 、num2。因为,a、b的值,只是从num1、num2的复制过来的。也就是说,a、b相当于num1、num2的副本,副本的内容无论怎么修改都不会影响到原件本身。因此,person1和person2的互换只是拷贝的两个地址的互换罢了,并不会影响到实参xiaoZhang和xiaoLi。也就是说change方法的超参数拷贝的是arr(实参)的地址,因此,它和arr指向的是同一个数组对象。这里的传递的还是值,不过,这个值是实参的地址罢了。

rc1596919047的博客 873

Python实战:5分钟搞定滑动平均窗口计算(附完整代码+逐行注释)

本文深入解析Python中滑动平均窗口计算的实现与优化,提供Numpy、Pandas等多种高效方案,并附完整代码和逐行注释。涵盖边界处理、性能优化及异常检测等实战技巧,帮助开发者快速掌握时间序列数据处理的核心技术。

weixin_30872157的博客 124

Java的值传递

一、值传递和引用传递 在程序设计语言中将参数传给方法或函数的方式目前有两种:一种是值传递,一种是引用传递。 值传递表示将实参的值传递给方法;引用传递表将实参a的地址引用传递给方法。 Java是采用值传递的,Java程序中的方法得到的总是实参值的拷贝, 二、代码运行 我们来看下下面代码的运行结果 public class Main { public static void main(String[] args) { ...

HerryBody 4549

51单片机AHT20-21源代码

传感器输出经过 标定的数字信号,标准 I 2 C 格式。AHT20 配有一个全新设计的 ASIC专用芯片、一 个经过改进的MEMS半导体电容式湿度传感元件和一个标准的片上温度传感元件,其 性能已经大大提升甚至超出了前一代传感器的可靠性水平,新一代温湿度传感器, 经过改进使其在恶劣环境下的性能更稳定。但是现在网上的大多数原码都是针对stm32等的这种多位单片机,而我们都知道51单片机是8位单片机,无法对浮点数进行运算,对32位的整数计算有时候也不是很准确,所以我对网上stm32的例程进行了修改。...

wd0710的博客 4545

Cadence 17.2配置CIS数据库报错?手把手解决ODBC驱动位数不匹配问题

本文详细解析了Cadence 17.2配置CIS数据库时常见的ODBC驱动位数不匹配问题,提供了从系统环境检查到分步解决方案的完整指南。重点解决32位应用程序与64位ODBC驱动之间的架构冲突,包含驱动安装、DSN配置及高级排查技巧,帮助电子工程师快速恢复设计环境。

play7的博客 970

Java值传递与引用传递的区别

Java值传递与引用传递 文章目录Java值传递与引用传递前景实参与形参值传递与引用传递Java中的值传递总结 前景 关于这个问题,引发过很多广泛的讨论,看来很多程序员对于这个问题的理解都不尽相同,甚至很多人理解的是错误的。还有的人可能知道Java中的参数传递是值传递,但是说不出来为什么。 在开始深入讲解之前,有必要纠正一下大家以前的那些错误看法了。如果你有以下想法,那么你有必要好好阅读本文。 错误理解一:值传递和引用传递,区分的条件是传递的内容,如果是个值,就是值传递。如果是个引用,就是引用传递。 错误

qq_47897078的博客 1万+

STM32F0实现数字化SPWM纯正弦波逆变器

这个没啥好说的,搭电路的事。其核心思想是两边桥臂分别由两个180度相位差的正弦波与三角载波比较来控制,优点是在开关器件工作频率一样的情况下,输出PWM频率是单极性SPWM的2倍,能够明显减少谐波,因此只需要相对较小的电感和电容滤波器件就可以起到很好的滤波效果,提升了系统的性能,也精简了系统体积,降低了成本。而双极性pwm则是在整个正弦周期内,四只管子都在高频开关状态工作,对角线上的管子一起导通,另一对角线上管子互补导通,实际上只需要一路互补的PWM控制,负载上电压在正电压和负电压之间切换,不出现0v。

forlifefor的专栏 1万+

Java中的值传递

本文探讨Java的参数传递机制,指出Java仅支持值传递而非引用传递。值传递是指传递参数值的副本,不影响原始数据;而引用传递则传递变量的地址,会直接影响原对象。通过多个代码示例(如基本类型交换、数组修改、对象引用变更等)演示了值传递的实际表现,并解释即使对象引用也是按值传递副本。文章最后从语言设计角度分析Java选择值传递的原因:简化模型、提高可读性、增强安全性,同时说明通过包装类等方式仍能实现类似引用传递的效果。这种设计使Java更安全可控,避免了引用传递的潜在副作用。

m0_74871188的博客 695

Eigen 直线拟合/曲线拟合/圆拟合/椭圆拟合

使用Eigen库进行直线拟合是数据分析和科学计算中的常见任务,主要通过最小二乘法实现。该代码演示了二维空间中的直线拟合,输出斜率和截距。

深之JohnChen的专栏 1589

数字签名(Digital Signature)技术详解:从原理到实践

数字签名技术是数字世界身份认证和数据完整性的核心保障。它结合非对称加密和哈希函数两大密码学技术,实现双重安全防护:哈希函数确保数据完整性,非对称加密确保签名不可伪造。签名过程包括发送方用私钥加密文件哈希值生成签名,接收方用公钥验证签名并比对哈希值。RSA、DSA、ECDSA等主流算法各有特点,适用于不同场景。公钥基础设施(PKI)通过数字证书和CA认证建立信任链,确保公钥真实性。这套技术体系支撑着电子合同、软件认证、在线交易等各类数字安全应用,是现代网络信任体系的基石。

guigenyi的专栏 1363

java中按值传递_Java中为什么只有按值传递

Java中为什么只有按值传递Java 中只有按值传递"Java 中只有按值传递",初看到这几个字有点不敢相信,无数次通过函数改变过对象,无数次跟同事说 Java 在传对象的时候是按引用传递。后来细细想想,之所以以为 Java 传对象是按引用传递是因为其中有很多概念都没理清楚,与 C++ 中的搞混了。从 C++ 转 Java 的时候将 C++ 中的知识点映射到 Java 没错,这有利于 C++ 转 ...

weixin_39581945的博客 211

等保测评-达梦数据库

一般适用于等保测评

m0_54146694的博客 1297

Java基础——值传递

/ 输出 [Original, Modified]System.out.println(obj.value);// 输出 100(非200!// 输出 10(未改变)// √ 修改原始对象(副本指向同一对象)d = new Data(200);// x 修改副本指向(不影响原始引用)// ❌ 修改副本引用。// ✅ 修改原始集合。对象引用 → 传递引用的副本(非对象本身)

chunbai0的博客 1553

32、通用处理器通信平台发展与5G开源社区技术解析

本文探讨了基于通用处理器(GPP)的通信平台在5G技术中的发展现状与挑战,详细介绍了多个开源平台和硬件架构,并分析了软件加速方法和未来发展方向。文章指出,尽管GPP具有灵活性和开放性优势,但在实时信号处理和功耗等方面仍存在瓶颈,需要通过核心技术研发、标准化协作和应用拓展推动5G技术的实际应用。

orange的博客 128

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

为什么Java中只有值传递?

要弄清这个问题,先得了解两个概念:形参&实参值传递&引用传递。

m0_73804764的博客 1230

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Java中是值传递和引用传递

值传递 / 引用传递 值传递:就是在方法调用的时候,实参是将自己的一份拷贝赋给形参,在方法内,对该参数值的修改不影响原来的实参。 引用传递:是在方法调用的时候,实参将自己的地址传递给形参,此时方法内对该参数值的改变,就是对该实参的实际操作。 Java中只有值传递 首先回顾一下在程序设计语言中有关将参数传递给方法(或函数)的一些专业术语。 按值调用(call by value):表示方法接收的是调用者提供的值。 按引用调用(call by reference):表示方法接收的是调用者提供的变量地址。

qq_52467117的博客 4982

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

java 值传递_Java只有值传递

可能有很多小伙伴都知道Java是值传递,但是又说不出个所以然,我也是这样,于是去看了一些博客,下面来一个简单的总结。首先说结论:Java中只有值传递,没有引用传递。这里涉及到值传递和引用传递两种传递机制:值传递(pass by value):是指在调用方法(或者函数)时,将实际参数复制一份传递到方法(或者函数)中,这样在函数中如果对形式参数进行修改,将不会影响到实参。引用传递(pass by re...

weixin_33894125的博客 137

java中什么是值传递

我们首先用一个例子引出这个问题(后面会放出全部代码) 如下图代码,输出后a和b的值,以及张三李四会交换吗 我们直接给出结果: 结果一定是不会交换的 那么为什么他不会交换呢?我给大家画一下这段程序执行时堆栈的解析图 首先Main方法入栈,然后实例化a,b,我们不妨设10所在地址为1001,b所在地址为1002,然后让ab分别指向他们,然后change(a,b)方法入栈实例化abt 然后t =a ,a=b,b=t 也就是让t指向a(1001),a去指向b(100...

peinanwei__的博客 4346

Java基础4:值传递

Java基础之值传递。

u014282578的博客 2027

【Java】Java中的值传递

Java中的值传递 文章目录Java中的值传递值传递,引用传递实参与形参值传递和引用传递为什么说Java只有值传递求值策略严格求值传值调用传引用调用传共享对象调用Java的求值策略Java中的对象传递 值传递,引用传递 实参与形参 形式参数:是在定义函数名和函数体的时候使用的的函数,目的是用来接收调用该函数时传入的参数 实际参数:在调用有参函数时,主调函数和被调函数之间有数据传递关系。在主调函数中调用一个函数时,函数名后面括号中的参数称为“实际参数” 值传递和引用传递 在把实际参数传递给形式参数的过程分两种

GengMS的博客 295
上一篇: matlab破解方法
下一篇: Servlet、ServletContext与ServletConfig的详解及区别
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值