代码如下:
Poeple people = new People();
people.change(people);
System.out.println(people.age);public void change(People p)
{
p = new People();
p.age++;
}其中age初始值为0  为什么System.out.println(people.age)打印出来还是0啊
是不是System.out.println(people.age)这里的people指向的还是Poeple people = new People();对象啊
调用people.change(people);后不是指向了change里的对象了吗?不是应该打印出来为1的吗?本人刚学java,很多不懂,大家不要笑话我啊。

解决方案 »

  1.   

    不能这么干的。class Person
    {
    private int age;
    public Person(int x)
    {
    this.setAge(x);
    }
    public void setAge(int i)
    {
    this.age=i;
    }
    public int getAge()
    {
    return this.age;
    }
    }
    public class PersonTest
    {
    public static void main(String[] args)
    {
    Person per1=new Person(10);
    System.out.println(per1.getAge());
    change(per1);
    System.out.println(per1.getAge());
    }
    public static void change(Person p)
    {
    p.setAge(110);
    }
    }
      

  2.   

    Java中真的不能这么干public void change(People p){
         p = new People();
         p.age++;
    }调用这个方法时,传进来的是people这个引用的副本,
    此时p = new People();
    将会使引用副本指向一个新的对象,原来的对象属性不会改变
      

  3.   

    java的函数参数值传递,而没有引用传递的。
      

  4.   

    java中的函数的参数传递是值传递,而不是应用传递,上面的你只是把people的值穿了过去,你可以对这个值进行更改,进行操作,但是你改变不了这个people的引用,她还是指向之前的那个引用对象。
      

  5.   

    http://topic.csdn.net/u/20111029/13/531b1fa9-fc46-43ee-8027-28949e92fdea.html可以看看这个帖子~
      

  6.   

    哦, 明白了,java传得都是副本,执行这个时p = new People();副本已经指向新的对象了,所以p.age++是反映在新的对象中的而System.out.println(people.age);打印的是第一个对象的成员值。
    谢谢各位啦!
      

  7.   


    虽然你这种是可行的。可是LZ那样做也是可行的。
    只是忽略了一点。就是:定义age变量的时候,需要时静态的.
    private static int age=0;
    这样就行了。
      

  8.   

    你觉得仅仅只是为了更改一个类的私有属性,就把它设成static(那还要private干嘛?),这样合理么?
      

  9.   

    Poeple people = new People();
    people.change(people);
    System.out.println(people.age);public void change(People p)
    {
    p.age++;
    }你这么写 ~~才合乎逻辑
    PS:
    引用类型变量,包括类、接口、数组(基本类型数组和对象数组)。 
      

  10.   

    传进去的是地址值
    Poeple people = new People();
    people.change(people);你可以理解成传入了一个 people引用的副本
    你对副本引用指向的地址区域进行修改,同时也是对原引用指向地址区域进行修改。但是
    public void change(People p)
    {
    p = new People();
    p.age++;
    }你让原引用的副本指向了另一个内存地址,那他们所指向的内存区域已经不同,所有对
    p = new People();
    p.age++;
    的操作,对Poeple people = new People();无效
      

  11.   

    在change方法中又重新创建了对象,其初始值为0。你需要知道age++与++age的区别。