当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递
他给的答案是:是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的
小弟不太明白,好像和自己对值类型与引用类型的理解不太一样,请熟悉这个的人给解释一下好么?感谢中。晚上结贴。

解决方案 »

  1.   

    确实java只有值传递
    不过我总觉得这样讲有些误导人的嫌疑。其实参数传递,传递的只有两种形式的参数,一种是基本类型参数,一种对象参数。
    基本类型传递的是数值,而对象传递传的是对象引用值。所以说java只有值传递。其实这个概念被强调应该是区别于c++的。其实很简单的一个概念,初学者最早理解基本都是正确的,却被“只有值传递”弄糊涂了
      

  2.   

    就像遥控器和电视的关系一样
    传的是遥控器的copy,但是这个copy还是可以操作那台电视的。
      

  3.   

    我感觉,之所以Java 声称只有值传递参数,没有引用传送的原因是:还是为了区别C++中的指针,维护自己据说的JAVA中没有指针引用。
    这样话,当对象作为参数进去后,它让我们理解传的只是一个引用,把这个引用当个值,可能是一个内存地址值,这样话在里面所作的修改,都可能影响到这个对象的具体属性。不知道,你是否明白了?
      

  4.   

    这样给你解释看看吧....
    A a;这里定义一个变量
    a=new A();这里把创建的对像的内存首地址给它,所说a变量的值只是一个地址值.当传参数的时候
    public void s(A b)
    {
    }
    这时候也是创建一个变量b,然后把变量a的值(地址值)给b,所以b和a就是引用了同个对像,因为它们的值是同一个地址值.
    所以说是传"值"-------------->地址值但是它们都是指向同一个对像(因为地址值相同)-----这就产生了引用传值的说法.
      

  5.   

    赞同zeroasan_(),我觉得他已经说得很清楚了。
      

  6.   

    by the way,100分真的有点诱惑 :)
      

  7.   

    楼主看这里:
    当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递
    他给的答案是:是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的
    ------------------------------------------------------------------------------------
    首先要声明,JAVA中只有值传递,没有地址传递。
    然后我们来看,JAVA中对象分为两种,一种是基本类型,另一种是引用类型。基本类型是值传递这个没什么好说的;引用类型则麻烦一点,我们来看个例子:class ReferObj 
    {
       private int arr =0;
       
       ReferObj(int i)
       {
           this.arr = i;
        }
      
        public void setArr(int i)
        {
           this.arr = i ;
        } 
      
       public String toString()
       {
          return this.arr;
        }}public class Test
    {
       
       void modifyArr(ReferObj obj , int i)
       {
         obj.setArr(i)
       }   void modifyObj(ReferObj obj , int i)
      {
         obj = new ReferObj(i); 
       }   public static void main(String[] args)
       {
         Test test = new Test();
        
         ReferObj obj = new ReferObj(1)  ;
        
         test.modifyArr(obj ,2);     test.modifyObj(obj ,3);
       
         System.out.print(obj);
      }
         
      搂主说,这段程序会打印什么呢?呵呵,当然是2。
       这是因为在JAVA中,初始化一个引用类型的变量会初始化两个变量,一个引用,一个对象本身,在JAVA中传递的实际上是引用的COPY,也就相当于引用的值传递,所以在程序中你能改变的只是引用指向的对象的属性,而不能改变引用的指向。
            
       
      
         
      

  8.   

    http://blog.csdn.net/meconsea/archive/2005/03/23/327294.aspx