public class TestTemp  {
 
public static void main(String[] args)throws Exception{
testE r = new testE(1);
System.out.println(r.a);//1
procee(r);
System.out.println(r.a);//还是1,为什么不是20?

}

public static void procee(testE o)
{

testE te = new testE(1);
te.a=20;
o=te;
System.out.println("~~~"+o.a);//20
}


}class testE
{
int a;
public testE(int a)
{
this.a=a;
}
}为什么不是20啊,o=te对象已经转过了啊,我传进去是个对象啊,为什么还是1?

解决方案 »

  1.   


            //这里只是临时将o指向te,并没有改变原来的r的任何属性
            o = te;
      

  2.   

    r传递到方法参数 o里面
    现在是 r和o对指向你在main里面创建的对象里 
    然后 procee方法里,你又把 o指向了另外一个 对象上,但是这个时候r还是指向原来的对象,r并没有变
    变的只是o这个引用的指向 ,所以 还是1
      

  3.   

    当testE 对象传入第二个方法时候,
    testE te = new testE(1);
    te又是一个新对象了。和第一个做参数传入的对象是两个对象。
      

  4.   

    你传的不是对象而是引用
    最后他指向 te
    但是主函数中的仍然指向t
      

  5.   

    Java里只有值传递,引用的话也只是把引用复制过去
      

  6.   

      你只是把值传到procee方法里面了,r当然还是不变,改了一下,下面就是20了.
    public class TestTemp  {
         
            public static void main(String[] args)throws Exception{
            testE r = new testE(1);
            System.out.println(r.a);//1
            r=procee(r);
            System.out.println(r.a);//就是20了}
        
        public static testE procee(testE o)
        {
            
            testE te = new testE(1);
            te.a=20;
            o=te;
            System.out.println("~~~"+o.a);//20
            return o;
        }
        
        
    }class testE
    {
        int a;
        public testE(int a)
        {
            this.a=a;
        }
    }
      

  7.   

    java中的函数参数都属于值传递1。一个方法不能修改一个基本数据类型的参数2
    2。一个方法可以可变一个对象参数的状态。
    3。一个方法不能让对象参数引用一个新的对象。
      

  8.   

    public class TestTemp { public static void main(String[] args) throws Exception {
    testE r = new testE(1);
    System.out.println(r.a);//1
    procee(r);
    System.out.println(r.a);//还是1,为什么不是20? } public static void procee(testE o) {
    // testE te = new testE(1);
    // te.a = 20;
    // o = te;
    o.a = 20;
    System.out.println("~~~" + o.a);//20
    }
    }class testE {
    int a; public testE(int a) {
    this.a = a;
    }
    }
    这样就可以变成20了,同意10楼的说法