import java.util.*;
class Student {
private String name;
private int age;
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return this.age;
}
public void setAge(int age) {
this.age = age;
}

public String toString(){
String msg="\t"+this.name+"\t"+this.age;
return msg;
}
}class Admin {
public void  create(String name ,int age,Student[] arr){
Student stu=new Student();
stu.setName(name);
stu.setAge(age);
arr[0]=stu;
arr[1]=stu;


}
}
public class test {
public static void main(String[] args){
Scanner in=new Scanner(System.in);
Student[] stuArr=new Student[2];
System.out.println("10:添加一个学生");
int b=in.nextInt();
Admin adminStu=new Admin();
if(b==10){
adminStu.create("小红",17,stuArr);
adminStu.create("小天",18,stuArr);

stuArr[0].setName("小王");
stuArr[0].setAge(55);

for(int i=0;i<2;i++){System.out.println(stuArr[i]);}}
}
哪个兄弟看一哈
为什么
stuArr[1]输出的不是
小天 18

解决方案 »

  1.   

    class Admin {
    public void  create(String name ,int age,Student[] arr){
    Student stu=new Student();
    stu.setName(name);
    stu.setAge(age);
    arr[0]=stu;
    arr[1]=stu;
    }
    }
    这个函数写的有问题,
    你把数组里的两个位置都用一个值填充了,所以出现不了就是arr[0]=stu;
    arr[1]=stu;这两句,运行adminStu.create("小红",17,stuArr);这句的时候,arr[0],arr[1]的值都变成了"小红",17.当运行adminStu.create("小天",18,stuArr); 时候,arr[0],arr[1]的值都变成了"小天",18.然后运行
    stuArr[0].setName("小王");
    stuArr[0].setAge(55);
    就出现了你现在的运行结果了.
      

  2.   

    但你执行完
    if (b == 10) {
    adminStu.create("小红", 17, stuArr);

    adminStu.create("小天", 18, stuArr);
    }后,stuArr[0]和 stuArr[1]都是 “ 小天,18”,
    stuArr[0]和stuArr[1]指向的是同一个对象(同一个地址空间),所以当执行
    stuArr[0].setName("小王");
    stuArr[0].setAge(55);后
    stuArr[0]和stuArr[1]都会发生改变,(因为是同一个对象)
      

  3.   

    当然不是18了
    亲测了下
    问题在于:Student[] stuArr=new Student[2]; 你创建的是stuArr引用 而未分配内存,当你输入10时,即b=18时,进行if语句
    if(b==10){
    adminStu.create("小红",17,stuArr);
    adminStu.create("小天",18,stuArr);

    因为Creat函数含有参数stuArr,传入的是引用(类传的是引用)
    然后你的
    Student stu=new Student();
    stu.setName(name);
    stu.setAge(age);
    arr[0]=stu;
    arr[1]=stu;
    使得arr[0]和arr[1]引用指向了同一块内存
    这使得你在改变arr[0]时,改变的是arr[0]和arr[1]引用共同指向的内存,当然arr[0]指的内存变了,arr[1]也跟着变,而且值相等。 你的这个改变在这个语句:
    stuArr[0].setName("小王");
    stuArr[0].setAge(55);如果不懂 请参考 函数的参数值传递与引用传递的区别