java值传递还是引用传递的一些见解

本文探讨了Java方法调用的值传递特性,通过实例解释了为何对象引用在方法内部的修改不会影响到原始变量。深入理解Java虚拟机,揭示了方法调用背后的原理。

最近刚刚读了深入理解java虚拟机一书,对于java方法是值传递还是引用传递有了自己的一些见解。

在这里插入图片描述
结论就是:java调用方法是值传递,注意:这个值就是变量的引用地址的值;为什么说是引用地址呢,因为虚拟机可能是通过直接引用内存地址,也可能是建立了一个句柄池。深入理解java虚拟机这本书我刚读了一遍,读后只有一种感觉,后悔为什么写了三年java代码才读这本书,之前只能算门外汉,读了这本书之后才有了真正入门的感觉。真正完全理解这本书读一遍肯定是不够的。

package ThreadDemo;

public class User {
	private int money;
	public int  getMoney() {
		return money;
	}
	public void setMoney(int money) {
		this.money = money;
	}
	public static void main(String[] args) {
		
		User user=new User();
		user.setMoney(100);
		User user2=new User();
		user2.setMoney(200);
		swap(user, user2);
		System.out.println(user.getMoney());
		System.out.println(user2.getMoney());
		
		String name="aa";
		change(name);
		System.out.println(name);
		
		int i=10;
		changeInt(i);
		System.out.println(i);
		//为什么 user和user2的已经在方法体里明明互换了引用,却没生效呢
		//java值传递:调用时会先去方法区拿字节码,class文件也就是字节码文件在类加载阶段会被读到这块儿内存中。执行时虚拟机会把字节码转为基于栈的指令集, 虚拟机就会告诉电脑主机在线程内存栈创建一个帧栈,然后执行指令
		//值传递 无论是对象还是基本变量 最终 他们都是将引用地址的值赋给了帧栈中方法参数对应的新的变量(相当于副本),在创建的帧栈中这个变量有自己的生命周期,随着出栈而消亡;
		//所以无论副本怎么改变引用,都不会引起原方法中的变量引用 这也就解释了 为什么int和String 不改变,以及对象交换引用失效
		//但是对于堆中的对象,由于原方法的变量引用和副本的引用都是指向的堆中同一个对象,所以,虽然副本不会改变原变量的引用,但是它可以改变堆中的对象
	}
	private static void change(String name2) {
		name2="dd";
	}
	private static void changeInt(int i) {
		i=0;
	}
	/**
	 * 将user和user2的引用互换
	 * @param user
	 * @param user2
	 */
	public static void swap(User user,User user2) {
		User temp;//交换变量
		temp=user;
		user=user2;
		user2=temp;
	}
	
}

运行结果:
100
200
aa
10

内容概要:本文介绍了一种基于蒙特卡洛模拟和拉格朗日优化方法的电动汽车充电站有序充电调度策略,重点针对分时电价机制下的分散式优化问题。通过Matlab代码实现,构建了考虑用户充电需求、电网负荷平衡及电价波动的数学模【电动汽车充电站有序充电调度的分散式优化】基于蒙特卡诺和拉格朗日的电动汽车优化调度(分时电价调度)(Matlab代码实现)型,采用拉格朗日乘子法处理约束条件,结合蒙特卡洛方法模拟大量电动汽车的随机充电行为,实现对充电功率和时间的优化分配,旨在降低用户充电成本、平抑电网峰谷差并提升充电站运营效率。该方法体现了智能优化算法在电力系统调度中的实际应用价值。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事新能源汽车、智能电网相关领域的工程技术人员。; 使用场景及目标:①研究电动汽车有序充电调度策略的设计与仿真;②学习蒙特卡洛模拟与拉格朗日优化在能源系统中的联合应用;③掌握基于分时电价的需求响应优化建模方法;④为微电网、充电站运营管理提供技术支持和决策参考。; 阅读建议:建议读者结合Matlab代码深入理解算法实现细节,重点关注目标函数构建、约束条件处理及优化求解过程,可尝试调整参数设置以观察不同场景下的调度效果,进一步拓展至多目标优化或多类型负荷协调调度的研究。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值