代码如下:
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,很多不懂,大家不要笑话我啊。
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,很多不懂,大家不要笑话我啊。
{
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);
}
}
p = new People();
p.age++;
}调用这个方法时,传进来的是people这个引用的副本,
此时p = new People();
将会使引用副本指向一个新的对象,原来的对象属性不会改变
谢谢各位啦!
虽然你这种是可行的。可是LZ那样做也是可行的。
只是忽略了一点。就是:定义age变量的时候,需要时静态的.
private static int age=0;
这样就行了。
people.change(people);
System.out.println(people.age);public void change(People p)
{
p.age++;
}你这么写 ~~才合乎逻辑
PS:
引用类型变量,包括类、接口、数组(基本类型数组和对象数组)。
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();无效