java参数的传递方式 博客分类: java学习 java
程序员文章站
2024-03-19 23:36:53
...
java中参数的传递方式
java 中参数的传递方式 分为: 按值传递(基本类型作为参数的传递) 按引用传递(对象作为参数的传递)
在这里,我觉得应该用内存模型去解释参数的传递 更为直观一些。(我就拿 Integer 做例子了,string 等同)
首先,按值传递(基本类型作参):例子:
输出的结果: 10;
原因分析:
当 int num=10; 这里相当与在栈内存中开辟出一块 A 来存放10;
当num 作为参数传递的时候 changeTheNum(num) ; 这时,我们将num 复制一份。 在栈内存中 开辟出 另外一块内存 B,存放num的这里复制。
当 param =100的时候,这里其实是是给B赋值为 100 ,当函数执行完成后,B被回收, 我们之前定义 num=10 存放在 A 内存中。 并没有任何影响。 当然 ,main 执行完毕后, A内存 也是要被回收的。
接下来,按引用(址)传递 ( 对象作为参数) 例子:
输出的结果: 100;
原因分析:
当 Integer num= new Integer(10); new Integer(10)->在堆内存中开辟一块内存 D 存放 Integer(10)的 对象; 然后 在栈内存中 开辟一个 A 内存存放堆内存D的地址。num只是 内存D存放值 的一个引用。
当num 作为参数传递的时候 changeTheNum(num) ; 这时,我们将num 复制一份。 在栈内存中 开辟出 另外一块内存 B,存放num的这里复制 , 这里同样是D内存的地址。
这里,param 和 num 都是对象的引用。 都存放D内存的地址。就和c语言中的指针一样。 即:param 和num 都 指向 D的地址。
当 param =100的时候,相当于更改了存放在 D中的值。当changeTheNum函数执行完成后,B被回收, 我们之前定义 num存放在 A 内存中。并没有任何影响。而A指向的D存放的值 已经发生了改变。 所以输出 为100;
java 中参数的传递方式 分为: 按值传递(基本类型作为参数的传递) 按引用传递(对象作为参数的传递)
在这里,我觉得应该用内存模型去解释参数的传递 更为直观一些。(我就拿 Integer 做例子了,string 等同)
首先,按值传递(基本类型作参):例子:
public static void main(String[] args){ int num = 10; // 或者是 Integer num =10; changeTheNum(num); system.out.println(num); } public static void changeTheNum(int param){ param = 100; }
输出的结果: 10;
原因分析:
当 int num=10; 这里相当与在栈内存中开辟出一块 A 来存放10;
当num 作为参数传递的时候 changeTheNum(num) ; 这时,我们将num 复制一份。 在栈内存中 开辟出 另外一块内存 B,存放num的这里复制。
当 param =100的时候,这里其实是是给B赋值为 100 ,当函数执行完成后,B被回收, 我们之前定义 num=10 存放在 A 内存中。 并没有任何影响。 当然 ,main 执行完毕后, A内存 也是要被回收的。
接下来,按引用(址)传递 ( 对象作为参数) 例子:
public static void main(String[] args){ Integer num = new Integer(10); changeTheNum(num); system.out.println(num); } public static void changeTheNum(Integer param){ param = 100; }
输出的结果: 100;
原因分析:
当 Integer num= new Integer(10); new Integer(10)->在堆内存中开辟一块内存 D 存放 Integer(10)的 对象; 然后 在栈内存中 开辟一个 A 内存存放堆内存D的地址。num只是 内存D存放值 的一个引用。
当num 作为参数传递的时候 changeTheNum(num) ; 这时,我们将num 复制一份。 在栈内存中 开辟出 另外一块内存 B,存放num的这里复制 , 这里同样是D内存的地址。
这里,param 和 num 都是对象的引用。 都存放D内存的地址。就和c语言中的指针一样。 即:param 和num 都 指向 D的地址。
当 param =100的时候,相当于更改了存放在 D中的值。当changeTheNum函数执行完成后,B被回收, 我们之前定义 num存放在 A 内存中。并没有任何影响。而A指向的D存放的值 已经发生了改变。 所以输出 为100;
上一篇: iOS 静态库 博客分类: iOS开发
下一篇: Mac常用技巧 博客分类: 常用命令
推荐阅读
-
java参数的传递方式 博客分类: java学习 java
-
java参数的传递方式 博客分类: java学习 java
-
获取java中已经加载类的来源地址 博客分类: Java java类加载来源地址
-
Java中复制文件的三种方法 博客分类: Java javaFiles.copy文件复制
-
把ActiveMQ的控制台整合到你的web程序中 博客分类: java随想 ActiveMQWebBeanmavenApache
-
一个简单的Struts, Spring, Hibernate 示例 博客分类: Java StrutsSpringHibernate
-
Re: 有什么RoR的特性是Java模仿不了的? 博客分类: 技术 JavaHibernate编程SpringActiveRecord
-
mysql优化特定类型的查询 博客分类: mysql mysql工作java
-
Java常见集合的归纳总结 博客分类: java java
-
根类加载器的一个特性 博客分类: 原创 Java虚拟机SUNCC++