java 值传递和引用传递
2021/11/7 11:11:30
本文主要是介绍java 值传递和引用传递,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一.首先要了解的是基本数据类型和引用数据类型
对于基本数据类型,进行数值的赋值的时候,是将这个值直接存放到这个变量当中
而对于引用数据类型,进行数值的赋值的时候,是将这个变量引用的地址所对应的值改变
再调用方法的时候,实际上就是赋值的操作
这里有个例子
public static void main(String[] args) { int num=1; String str="abc"; char[] ch={'a','b','c'}; change(num,str,ch); System.out.println(num); System.out.println(str); System.out.println(ch); foo(ch); System.out.println(ch); } public static void change(int n,String s,char[] c) { char[] b={'1','2','3'}; n=2; s="bcd"; c=b; } public static void foo(char[] c) { c[0]='g'; }
输出结果如下:
对于num来说这就是最经典的值传递
将num的值传递给change方法里的n,在这个方法中实际上是对于n的值的改变,而没有对num的值改变
对于str来说虽然是引用类型,但是!在change方法里它的值发生了改变,它就会在堆里面重新开辟一个新的空间,也就是说在change方法里面,s变量实际上是String s= new String(“bcd”);
对于字符数组char[] ch在change方法里跟str相同,都是对于原先的数组长度发生了改变,从而在堆里面重新开辟一个新空间。
而在foo方法里,ch是将它的引用传递给c,然后c在foo方法直接将索引对应的值改变,并没有将原有的数组改变,所以它们就是共用一个堆空间,ch因此改变了它的ch[0]的值。
总结:
值传递:实际上是在方法里创建了一个副本用来存放值,并没有与实际参数有任何关系
引用传递:实际上是在方法里将实参的地址传递给形参,它们就共用一个地址(在没有改变长度的情况下,改变长度就会new一个堆空间),形参修改值就会将实参的值一起改变。
这篇关于java 值传递和引用传递的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-11有哪些好用的家政团队管理工具?
- 2025-01-11营销人必看的GTM五个指标
- 2025-01-11办公软件在直播电商前期筹划中的应用与推荐
- 2025-01-11提升组织效率:上级管理者如何优化跨部门任务分配
- 2025-01-11酒店精细化运营背后的协同工具支持
- 2025-01-11跨境电商选品全攻略:工具使用、市场数据与选品策略
- 2025-01-11数据驱动酒店管理:在线工具的核心价值解析
- 2025-01-11cursor试用出现:Too many free trial accounts used on this machine 的解决方法
- 2025-01-11百万架构师第十四课:源码分析:Spring 源码分析:深入分析IOC那些鲜为人知的细节|JavaGuide
- 2025-01-11不得不了解的高效AI办公工具API