当一个对象被当做参数传递到一个方法后,此方法可改变这个对象的属性,并可以返回变化后的结果,那么这里到底是值传递还是应用传递?

解决方案 »

  1.   

    引用....
    public Object fun(Object obj)
    {
        return obj;}
      

  2.   

    当然是传值。java中只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用时永远不会改变的。
      

  3.   

    值传递,记住一点java里只有值传递  
      

  4.   

    这里讲得很清楚http://developer.51cto.com/art/200911/165015.htmJava中的参数传递时传值呢?还是传引用?要说明这个问题,先要明确两点:1. 不要试图与C进行类比,Java中没有指针的概念2. 程序运行永远都是在栈中进行的,因而参数传递时,只存在传递基本类型和对象引用的问题。不会直接传对象本身。明确以上两点后。Java在方法调用传递参数时,因为没有指针,所以它都是进行传值调用(这点可以参考C的传值调用)。因此,很多书里面都说Java是进行传值调用,这点没有问题,而且也简化的C中复杂性。
      

  5.   

    JAVA 传值 调用引用
    对象的内容可以在被调用的方法中改变,但对象的引用是不会改变的。
      

  6.   

    是值传递,Java里只有值传递,而c#里才有传引用一说法这里是传的对象的引用地址值,所以也是值传递
      

  7.   

    A a1 = new A(); 
    其实分配了两块内存,一个是A a1,在栈里(所谓的引用),还有一个new A()在堆里(所谓的对象),栈中的内容就是堆的地址。可以把a1看成是北京路上的一块指路牌,指向了火车站。 
    A a2 = a1; (方法参数与之类似)
    分配了一个新的栈内存(南京路上的指路牌),同样指向刚才那个地址(火车站)。 
    这个时候,进行a1.x = 5操作(类似指着北京路上的指路牌说,“去,把那个火车站的站台增加到5座”),同样会影响a2.x(因为是同一个,类似在完成上面所说的增加站台数量后,指指南京路上的指路牌问:“这个火车站有多少站台”) 
    如果再进行a2 = new A(); 
    此时,又分配了一个新的堆内存(造了一座新的火车站),同时把刚才a2所在栈内存(南京路上的指路牌)中的内容改为了新的堆(新的火车站)地址。 
    如果再对a1.x = 100操作,再也不会影响a2.x,因为a1,a2已经指向两个堆对象了(两块各自指向不同的火车站的指路牌) --------------- 对于基本类型,int... 
    由于栈内存中的数据不是指向堆内存地址的指针/引用(它们就是自己,不是什么指路牌),而是实实在在的数值,因此它们就是属于所谓按值传递。改变任何一个栈内存中的数据,影响的只是这个变量本身的值。 --------------- 
    当然,上面对于栈、堆的描述是为了便于理解而简单化的。比如,也有引用及数值的位置是在堆中(依语言不同,可能略有差别,位于栈中的引用主要是局部变量,参数等,位于堆中的引用主要是成员/全局变量),但原理类似(同样可以使用指路牌-火车站的例子,可以想象成放在火车站中的指路牌)
      

  8.   

    传引用可改变值,传值不会以改变当前值 如int 就是值类型 Integer就是包装过的可改变的