对于JAVA中只有值传递的疑惑答疑

本文深入解析Java中值传递与引用传递的区别,通过实例代码详细解释为何Java只有值传递,澄清常见误解,帮助读者理解对象传递的本质。

很多朋友都听过你的老师说JAVA只有值传递,但是根本没有理解为啥只有值传递,基本数据类型还可以理解,但是引用类型的时候就产生了疑惑,为什么我将某某对象传递给方法,但是他的值改变了,这不就违背了JAVA只有值传递的说法了么。

首先我们来理解值传递和引用传递。

简单来说:值传递,传递的是对象的复制的值,是对象的副本,方法内部无论怎么改变不会影响到方法外的对象本身。

引用传递:传递的是对象的地址,方法中对对象的改变会导致方法外的对象发生变化。

这里很多人有个理解误区,值传递很好理解,也很好证明,值传递是对对象的值说的,而引用传递是对对象的地址说的。你用值的改变来证明是引用传递这是不对的。

记住一点:是否存在引用传递的关键,就是是否能通过方法来改变实参对象的地址。

在这里我要解释下, 传递一个对象给了方法,在对象中对对象的属性做了修改,然后方法外的对象的属性也跟着做了改变

首先引用对象引用的是对象的地址。

我对声明对象做一个拆开解释

String str=new String("123");

以上代码做了2个关键步骤

1.声明引用

2.将对象的地址指向引用对象

所以拆解后的代码就是

String str;

str=new String("123");

引用对象,引用的是对象的地址。你传递参数给方法的时候,传递的是引用的拷贝。这个和基本数据类型有区别,基本数据类型拷贝的是他的值,而这里拷贝的是引用。正是因为拷贝的是引用所以在方法中2个引用指向了同一个地址,给你的错觉是传递的地址。而在方法中改变了方法中对象的引用地址的时候,方法外的引用地址不会跟随改变。这就是值传递。

 

下面开始贴代码,每一行我都贴了注释。

/***
 * 值传递:传递的是对象的拷贝,方法内部无论怎么修改不会导致参数的本身发生变化
 * 
 * 引用传递:传递的是地址,方法内部改变地址后,会导致原参数的地址跟随改变
 * 
 * 理解盲区:很多人会因为看到引用对象的数值改变了以为是引用传递。
 * 
 * 谨记一点,区分值传递还是引用传递的关键是地址是否发生改变
 * 
 * 因此通过地址的变化来证明JAVA中不存在引用传递来帮助理解,Java中只存在值传递。
 */
public class Test {

	public static String getTest(String param) {
		param = new String("345"); // 改变引用对象的地址 如果是引用传递会改变原参数的地址,值传递会创建新的地址
		return param;
	}

	public static void main(String[] args) {
		String param1 = "123";// 引用对象,原地址上的对象
		String result = getTest(param1);// 获得新地址返回后的对象
		System.out.println("原对象的地址上的数值为" + param1 + "\n新地址上的数值为" + result);
		// 通过实验证明传递的并不是对象的地址,因为对引用的地址改变之后并没有导致原参数的地址跟随一起改变
	}
}

【电能质量扰动】基于ML和DWT的电能质量扰动分类方法研究(Matlab实现)内容概要:本文研究了一种基于机器学习(ML)和离散小波变换(DWT)的电能质量扰动分类方法,并提供了Matlab实现方案。首先利用DWT对电能质量信号进行多尺度分解,提取信号的时频域特征,有效捕捉电压暂降、暂升、中断、谐波、闪变等常见扰动的关键信息;随后结合机器学习分类器(如SVM、BP神经网络等)对提取的特征进行训练与分类,实现对不同类型扰动的自动识别与准确区分。该方法充分发挥DWT在信号去噪与特征提取方面的优势,结合ML强大的模式识别能力,提升了分类精度与鲁棒性,具有较强的实用价值。; 适合人群:电气工程、自动化、电力系统及其自动化等相关专业的研究生、科研人员及从事电能质量监测与分析的工程技术人员;具备一定的信号处理基础和Matlab编程能力者更佳。; 使用场景及目标:①应用于智能电网中的电能质量在线监测系统,实现扰动类型的自动识别;②作为高校或科研机构在信号处理、模式识别、电力系统分析等课程的教学案例或科研实验平台;③目标是提高电能质量扰动分类的准确性与效率,为后续的电能治理与设备保护提供决策依据。; 阅读建议:建议读者结合Matlab代码深入理解DWT的实现过程与特征提取步骤,重点关注小波基选择、分解层数设定及特征向量构造对分类性能的影响,并尝试对比不同机器学习模型的分类效果,以全面掌握该方法的核心技术要点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值