很菜的问题,但思维转不过来了,求点拨

longer5153458 2013-08-19 12:17:28
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


不知道结果为啥是这样
最后不应该都是指向同一个引用值么,但又不知道应该指向哪个引用值了......
这个真心看不懂,求高手一步一步讲解
...全文
265 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
lcf 2013-08-19
  • 打赏
  • 举报
回复
abc [2]=abc[0]; //{Alice, Bob, Alice}
abc [0]=abc[1]; //{Bob, Bob, Alice}
abc[1]=abc [2]; //{Bob, Alice, Alice}
算了我不知道我在说啥
lcf 2013-08-19
  • 打赏
  • 举报
回复
你去掉第二句看看你都干了啥
valenon 2013-08-19
  • 打赏
  • 举报
回复
楼主这个不难,自己仔细分析一下。你一句一句这样分析: 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]分别是什么值? 别三句拉在一起看,一句一句解。
goldmei88 2013-08-19
  • 打赏
  • 举报
回复
引用 4 楼 u011325635 的回复:
[quote=引用 楼主 longer5153458 的回复:]
看图 [/quote] 想说的是这个,简洁易懂
goldmei88 2013-08-19
  • 打赏
  • 举报
回复
引用 3 楼 wlwlwlwl015 的回复:
你第一句abc [2]=abc[0]就已经覆盖了abc [2]的值,你第三行再次将abc [2]的值赋给abc[1],肯定是覆盖之后的值了么
简单明了
likj_sh 2013-08-19
  • 打赏
  • 举报
回复
刚学的时候这样转不过来很正常,多接触就好了
边涯浪子 2013-08-19
  • 打赏
  • 举报
回复
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] 这样就很明确的看到结果了。
longer5153458 2013-08-19
  • 打赏
  • 举报
回复
有点明白了,使用new就是创建了新的内存地址
Michxy_Wong 2013-08-19
  • 打赏
  • 举报
回复
################################# 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
harrisonkao 2013-08-19
  • 打赏
  • 举报
回复
你要先用变量接收abc [2],最后在将该变量接收的对象返回给abc[1]。 不接收的话abc[2]指向的对象就丢失了。
怀化纱厂球迷 2013-08-19
  • 打赏
  • 举报
回复
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
张自强 2013-08-19
  • 打赏
  • 举报
回复
想交换,定义一个 temp 不就可以了吗。 两个数交互 大学编程第一堂课老师就说了,要用temp 临时存放的。这个还有什么讨论的。
小行星0906 2013-08-19
  • 打赏
  • 举报
回复
引用 楼主 longer5153458 的回复:


看图

小灯光环 2013-08-19
  • 打赏
  • 举报
回复
你第一句abc [2]=abc[0]就已经覆盖了abc [2]的值,你第三行再次将abc [2]的值赋给abc[1],肯定是覆盖之后的值了么

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧