public class Employee {
private String name;
private double salary;
public Employee(String n,double s){
name = n;
salary =s;
}
public class Test {
public static void main(String[] args) {
Employee [] abc= new Employee[3];
abc [0]= new Employee("Alice", 70000);
abc [1] = new Employee("Bob",60000);
abc [2]= new Employee("Plice", 50000);
abc [2]=abc[0];
abc [0]=abc[1];
abc[1]=abc [2];
for(Employee e:abc){
System.out.println(e.getName()+"\t"+e.getSalary());
}

}
}
输出结果:
Bob 60000.0
Alice 70000.0
Alice 70000.0
不知道结果为啥是这样
最后不应该都是指向同一个引用值么,但又不知道应该指向哪个引用值了......
这个真心看不懂,求高手一步一步讲解堆,栈,引用值

解决方案 »

  1.   

    abc [2]=abc[0]; //{Alice, Bob, Alice}
    abc [0]=abc[1]; //{Bob, Bob, Alice}
    abc[1]=abc [2]; //{Bob, Alice, Alice}
    算了我不知道我在说啥
      

  2.   

    你第一句abc [2]=abc[0]就已经覆盖了abc [2]的值,你第三行再次将abc [2]的值赋给abc[1],肯定是覆盖之后的值了么
      

  3.   

    想交换,定义一个 temp 不就可以了吗。
    两个数交互 大学编程第一堂课老师就说了,要用temp 临时存放的。这个还有什么讨论的。
      

  4.   

    abc [0]= new Employee("Alice", 70000);
    abc [1] = new Employee("Bob",60000);
    abc [2]= new Employee("Plice", 50000);
    abc [2]=abc[0];
    abc [0]=abc[1];
    abc[1]=abc [2];
    这是你的代码!
      
    abc [2]=abc[0];
    abc [0]=abc[1];
    abc[1]=abc [2];这3句的意思 你懂么。  就好比你把0里面的给了2, 1里面的给了0 ,2里面的赋值给力1
      

  5.   

    你要先用变量接收abc [2],最后在将该变量接收的对象返回给abc[1]。
    不接收的话abc[2]指向的对象就丢失了。
      

  6.   

    有点明白了,使用new就是创建了新的内存地址
      

  7.   

    #################################
    abc [0]= "Alice", 70000
    abc [1] = "Bob",60000
    abc [2]= "Plice", 50000#################################
    abc[2]= "Alice", 70000;  abc[2]已经是"Alice", 70000  这个值
    abc[0]= "Bob",60000;     abc[0]已经是"Bob",60000 这个值
    abc[1]=abc[2]="Alice", 70000;    abc[2]在第一次赋值已经改变了值,所以是把"Alice", 70000给abc[1]#################################
    所以输出为
    abc[0]=Bob,60000
    abc[1]=Alice, 70000
    abc[2]=Alice, 70000
      

  8.   

    1,首先 没有进行任何赋值的时候
    abc[0] = Employee[Alice, 70000]
    abc[1] = Employee[Bob, 60000]
    abc[2] = Employee[Plice, 50000]2,进行“abc[2] = abc[0];”操作之后
    abc[0] = Employee[Alice, 70000]
    abc[1] = Employee[Bob, 60000]
    abc[2] = Employee[Alice, 70000]
    // Employee[Plice, 50000]这个对象没有任何人引用它,可能等待垃圾回收3,进行“abc[0] = abc[1];”操作之后
    abc[0] = Employee[Bob, 60000]
    abc[1] = Employee[Bob, 60000]
    abc[2] = Employee[Alice, 70000]4,进行“abc[1] = abc [2];”操作之后
    abc[0] = Employee[Bob, 60000]
    abc[1] = Employee[Alice, 70000]
    abc[2] = Employee[Alice, 70000]这样就很明确的看到结果了。
      

  9.   

    楼主这个不难,自己仔细分析一下。你一句一句这样分析:
    abc [2]=abc[0]; //这句完了之后,abc[1],abc[2],abc[3]分别是什么值?
    abc [0]=abc[1]; //这句完了之后,abc[1],abc[2],abc[3]分别是什么值?
    abc[1]=abc [2]; //这句完了之后,abc[1],abc[2],abc[3]分别是什么值?别三句拉在一起看,一句一句解。