java中的值传递与引用传递
来源:互联网 发布:adc0804 51单片机 编辑:程序博客网 时间:2024/05/21 00:18
最近刷题用递归解决关于树的问题的时候,在递归函数调用的时候什么时候传入值,什么时候传入引用有疑问,因为这关系到什么时候我们需要恢复现场,什么时候不需要。在网上搜索了一下,感觉这篇总结的非常简单明了,简而言之,基础数据类型(int,char,……)传值,对象类型(Object,数组,容器……)传引用。但是对于String, Integer, Double等等immutable的类型,也是传值需要特殊处理。
转自 http://blog.csdn.net/fbysss/article/details/3082949
关键字:Java 传值 传引用
这是个老生常谈的问题了,引起过无数争论,但可以说一直没有一个令人满意的回答。
有些人非要故弄玄虚,把传引用说成是栈里面放的是引用的值,说只有传值没有传引用,那看看这句经典名言吧:
O'Reilly's Java in a Nutshell by David Flanagan (see Resources) puts it best: "Java manipulates objects 'by reference,' but it passes object references to methods 'by value.'"
从这里也可以看到,David 也没那么生硬,不过是看你从哪个角度来认识这个问题,如果大家习惯c++的那种传参时的理解方式,为何不能这么比较呢?
有人已经总结过:
参见
http://www.javaresearch.org/article/3156.htm
1、对象是按引用传递的
2、Java 应用程序有且仅有的一种参数传递机制,即按值传递
3、按值传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的一个副本
4、按引用传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的内存地址,而不是值的副本
写的没错,但是文字太多,第二条就已经把人弄糊涂了,得仔细看完4条才清楚。而且对String类型的疑惑没有解决。
这么简单的事情,何必这么绕呢?为啥没人跟c++过不去,偏要跟Java来劲?
三句话总结一下:
1.对象就是传引用
2.原始类型就是传值
3.String,Integer, Double等immutable类型因为没有提供自身修改的函数,每次操作都是新生成一个对象,所以要特殊对待。可以认为是传值。
Integer 和 String 一样。保存value的类变量是Final属性,无法被修改,只能被重新赋值/生成新的对象。 当Integer 做为方法参数传递进方法内时,对其的赋值都会导致 原Integer 的引用被 指向了方法内的栈地址,失去了对原类变量地址的指向。对赋值后的Integer对象做得任何操作,都不会影响原来对象。
其他参考文章:
http://blog.darkmi.com/2010/11/28/1430.html
http://dreamhead.blogbus.com/logs/2005/05/1189478.html
http://www.javaeye.com/topic/12961
- Java中的值传递与引用传递
- java中的值传递与引用传递
- java中的值传递与引用传递
- Java中的值传递与引用传递
- java中的值传递与引用传递
- java中的值传递与引用传递
- Java中的值传递与“引用传递”
- Java中的值传递与引用传递
- java中的值传递与引用传递
- Java中的值传递与引用传递
- java 中的值传递,与引用传递
- JAVA中的值传递与引用传递
- Java中的值传递与“引用传递”
- Java语言中的值传递与引用传递
- Java语言中的值传递与引用传递
- Java中的值传递与引用传递详解
- 关于java中的值传递与引用传递的见解
- Java中的值传递与引用传递详解
- adams常用函数说明
- 字符串反转
- javafx的一些小技巧
- BZOJ斜率优化水题集
- UVALive3181-Fixing the Great Wall(区间dp)
- java中的值传递与引用传递
- windchill11 安装遇到的问题
- Linux运维笔记----系统恢复技术
- 360 校招内存管理Java版
- 【NOIP2012模拟10.26】电影票
- 醉鹅舜达餐饮才是总部
- 开源框架
- Microsoft .Net Remoting系列专题之一:.Net Remoting基础篇
- java运算符