浏览 14869 次
锁定老帖子 主题:Java传递参数的机制
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2006-10-02
其实,弄清楚这个问题得从概念入手。什么是按值传递,什么是按照参数传递。 定义一个变量TestObject obj = new TestObject(); 然后把 obj 作为参数传递给一个方法。如果在这个方法中,只能改变obj指向的这个对象的内容,那就是“值传递”,传过去的值就是指向这个对象的指针。如果在这个方法中通过操作,使得返回后的obj指向另外一个对象,那就是“引用传递”,传过去的是对这个指针变量的“引用”。 public class Para1 { public static void main(String[] args) { StringBuffer sb = new StringBuffer("Hello "); System.out.println("Before change, sb = " + sb); changeData(sb); System.out.println("After changeData(n), sb = " + sb); } public static void changeData(StringBuffer strBuf) { //strBuf = new StringBuffer("Hi "); strBuf.append("World!"); } } 把strBuf = new StringBuffer("Hi ");行注释掉和不注释掉将看到两个不同的结果注释的时候: Before change, sb = Hello After changeData(n), sb = Hello World! 不注释掉的时候: Before change, sb = Hello After changeData(n), sb = Hello 当不注释掉的时候并没有出现: Before change, sb = Hello After changeData(n), sb = Hi World! 这说明了,在strBuf = new StringBuffer("Hi ");这行中,strBuf在内存中开辟了一个新的存储地址,不再和开始的sb指向同一个位置,所以,print出来的sb的值没有改变。这个时候的strBuf为"Hi World!"(可以在changeDate方法里面print出来),sb为"Hello"。 所以,根据上面的概念,Java传递参数是属于按值传递,这种情况下参数的值就是对该对象的引用。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2006-10-02
本文其实本来想自己写的,也想好了自己应该怎样去写。但是写好了发现还有一篇文章比自己的写的更加好(http://www.csdn.net/develop/article/22/22025.shtm)。所以,就把自己的理解加上他的例子写成一个文章了。。
|
|
返回顶楼 | |
发表时间:2007-01-08
in C and JAVA, arguments are passed by value.
|
|
返回顶楼 | |
发表时间:2007-01-08
java的基本知识,还需要专门写出来?-建议在入门讨论中发表
|
|
返回顶楼 | |
发表时间:2007-01-22
我到觉得写得挺好,简单明晰,为圈子积累人气嘛
|
|
返回顶楼 | |
发表时间:2007-01-22
觉得用stringbuffer这个例子并不恰当,换为string 就不成立了,会让初学者很晕。
|
|
返回顶楼 | |
发表时间:2007-01-22
在java中都是值传递吧,或者说传递的都是副本。
|
|
返回顶楼 | |
发表时间:2007-04-23
Java参数传递方式:http://www.jiehoo.com/java-pass-parameter.htm
|
|
返回顶楼 | |
发表时间:2007-04-23
不是吧! 我们 老师 说 JAVA只有 (值传递)!
说是为了 JAVA的安全机制 考虑的! |
|
返回顶楼 | |