Feng.Li's Java See

抓紧时间,大步向前。
随笔 - 92, 文章 - 4, 评论 - 48, 引用 - 0
数据加载中……

2008年1月29日

关于Java的传值问题,个人感觉书上说的都不好,请进来听听我的看法。

 关于值传递和引用传递的问题,我想很多人刚开始学的时候都会很迷惑,特别是有些书的文学水平实在不敢恭维。
在此,我特在此对Java的传值和传址提出我自己的一个看法,也许让你能对这个问题的理解起到帮助。
        首先:值传递是很好理解的。比如:
        public   class   test   {
      int   a   =   3;
      public   void   plus(int   b){
        b     =   b+1;
        }
        public   static   void   main(String   args[])
      {
        test   t   =   new   test();
        t.plus(t.a);
        System.out.println(t.a);
      }
      }
    输出的结果是3.这就是值传递。其实我们可以这样理解:
          在plus(int   b)函数里,int   b是作为这个函数的一个局部变量,在调用这个函数的时候开始位这个变量的内存空间。当我把变量a传给这个函数的时候,实际上是把a变量当时的值拷贝一个放到变量b的分配空间里,b   =   b+1;这句改变的只是函数的局部变量b的值,当调用结束的时候,变量b的作用范围也就结束了,而你在什么时候修改了变量a的分配空间呢?当然是没有啦(除非你理解成变量a的空间整个放进b的空间里:))

      而所谓的引用传递,我觉得这个名次起的很混淆视听。以我自己的理解,一切传递都是拷贝传递。因为对象的标识符代表的是对象的存储地址,所以你把对象的标识符号传递给函数的时候,实际上是把对象地址的拷贝传递给了函数。虽然也是拷贝,但是2个地址拷贝都是指向一个地址的,所以如果在函数里修改了对象,那么也实际上就修改了原先的值.
归根到底一句话:Java一切参数的传递都是拷贝传递!

posted @ 2008-01-29 15:03 小锋 阅读(1048) | 评论 (4)编辑 收藏