论坛首页 入门讨论版 OO

Java传递参数的机制

浏览 548 次
该帖已经被评为新手帖
作者 正文
最后更新时间:2007-09-22 关键字: Java传递参数的机制

 

Java究竟是应该按照什么来传递参数?值?引用?还是两者皆有?

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

定义一个变量TestObject obj = new TestObject(); 然后把 obj 作为参数传递给一个方法。如果在这个方法中,只能改变obj指向的这个对象的内容,那就是“值传递”,传过去的值就是指向这个对象的指针。如果在这个方法中通过操作,使得返回后的obj指向另外一个对象,那就是“引用传递”,传过去的是对这个指针变量的“引用”。

 

代码
  1. public class Para1 {   
  2.     public static void main(String[] args) {   
  3.     StringBuffer sb = new StringBuffer("Hello ");   
  4.     System.out.println("Before change, sb = " + sb);   
  5.     changeData(sb);   
  6.     System.out.println("After changeData(n), sb = " + sb);   
  7.     }   
  8.   
  9.     public static void changeData(StringBuffer strBuf) {   
  10.     //strBuf = new StringBuffer("Hi ");   
  11.     strBuf.append("World!");   
  12.     }   
  13. }  

 

把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传递参数是属于按值传递,这种情况下参数的值就是对该对象的引用。

   
最后更新时间:2007-09-22
你不能通过这个实验就推断他是按照什么传递的吧
   
0 请登录后投票
最后更新时间:2008-01-09
http://www.javaeye.com/topic/25483#
转载??
   
0 请登录后投票
论坛首页 入门讨论版 OO

跳转论坛:
JavaEye推荐