ava到底是值传递还是引用传递?
2022/11/7 1:24:00
本文主要是介绍ava到底是值传递还是引用传递?,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Java到底是值传递还是引用传递?
这虽然是一个老生常谈的问题,但是对于没有深入研究过这块,或者Java基础不牢的同学,还是很难回答得让人满意。
可能很多同学能够很轻松的背出JVM、分布式事务、高并发、秒杀系统、领域模型等高难度问题,但是对于Java基础问题不屑一顾。这种抓大放小的初衷是对的,要是碰到深究基础细节的面试官,就抓瞎了。
今天一灯带你一块深入剖析Java传递的底层原理,看完这篇文章再去面试,面试官肯定要竖起大拇哥夸你:
“小伙子,你是懂Java传递的!”
1. 什么是形参和实参
形参: 就是形式参数,用于定义方法的时候使用的参数,是用来接收调用者传递的参数的。
实参: 就是实际参数,用于调用时传递给方法的参数。实参在传递给别的方法之前是要被预先赋值的。
/** * @author 一灯架构 * @apiNote Java传递示例 **/ public class Demo { public static void main(String[] args) { String name = "一灯架构"; // 这里的name就是实际参数 update(name); System.out.println(name); } // 这里方法参数列表中name就是形式参数 private static void update(String name) { // doSomething } }
在Java方法调用的过程中,就是把实参传递给形参,形参的作用域在方法内部。
2. 什么是值传递和引用传递
值传递: 是指在调用方法时,将实际参数拷贝一份传递给方法,这样在方法中修改形式参数时,不会影响到实际参数。
引用传递: 也叫地址传递,是指在调用方法时,将实际参数的地址传递给方法,这样在方法中对形式参数的修改,将影响到实际参数。
也就是说值传递,传递的是副本。引用传递,传递的是实际内存地址。这是两者的本质区别,下面会用到。
3. 测试验证
3.1 基本数据类型验证
先用基本数据类型验证一下:
/** * @author 一灯架构 * @apiNote Java传递示例 **/ public class Demo { public static void main(String[] args) { int count = 0; update(count); System.out.println("main方法中count:" + count); } private static void update(int count) { count++; System.out.println("update方法中count:" + count); } }
输出结果:
update方法中count:1 main方法中count:0
可以看到虽然update方法修改了形参count的值,但是main方法中实参count的值并没有变,但是为什么没有变?我们深究一下底层原理。
我们都知道Java基本数据类型是存储在虚拟机栈内存中,栈中存放着栈帧,方法调用的过程,就是栈帧在栈中入栈、出栈的过程。
这篇关于ava到底是值传递还是引用传递?的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?
- 2024-05-09企业src漏洞挖掘-有意思的命令执行