论坛首页 入门技术论坛

Java传递参数的机制

浏览 14869 次
该帖已经被评为新手帖
作者 正文
   发表时间:2006-10-02  
OO
Java究竟是应该按照什么来传递参数?值?引用?还是两者皆有?

其实,弄清楚这个问题得从概念入手。什么是按值传递,什么是按照参数传递。

定义一个变量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传递参数是属于按值传递,这种情况下参数的值就是对该对象的引用。
   发表时间:2006-10-02  
本文其实本来想自己写的,也想好了自己应该怎样去写。但是写好了发现还有一篇文章比自己的写的更加好(http://www.csdn.net/develop/article/22/22025.shtm)。所以,就把自己的理解加上他的例子写成一个文章了。。
0 请登录后投票
   发表时间:2007-01-08  
in C and JAVA, arguments are passed by value.
0 请登录后投票
   发表时间:2007-01-08  
java的基本知识,还需要专门写出来?-建议在入门讨论中发表
0 请登录后投票
   发表时间:2007-01-22  
我到觉得写得挺好,简单明晰,为圈子积累人气嘛
0 请登录后投票
   发表时间:2007-01-22  
觉得用stringbuffer这个例子并不恰当,换为string 就不成立了,会让初学者很晕。
0 请登录后投票
   发表时间:2007-01-22  
在java中都是值传递吧,或者说传递的都是副本。
0 请登录后投票
   发表时间:2007-04-23  
Java参数传递方式:http://www.jiehoo.com/java-pass-parameter.htm
0 请登录后投票
   发表时间:2007-04-23  
不是吧! 我们 老师 说  JAVA只有 (值传递)!
说是为了 JAVA的安全机制 考虑的!
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics