JAVA问题。。看下面的代码~为什么输出结果,是a z,而不是a a,急,谢谢。。

classUser{publicStringname="";}publicclassMain{publicstaticvoidmain(String[]args){//T... class User {
public String name = "";

}
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
String[] a = { "a", "b", "c" };
String[] b = new String[3];
for (int i = 0; i < b.length; i++) {
b[i] = a[i];

}
a[0] = "z";
System.out.println(b[0]);

User[] c = new User[3];
for (int i = 0; i < c.length; i++) {
c[i] = new User();
c[i].name = String.valueOf((char)('a' + i));
}
User[] d = new User[3];
for (int i = 0; i < d.length; i++) {
d[i] = c[i];
}
c[0].name = "z";
System.out.print(d[0].name);
}

}
展开
 我来答
太空易①86011
2011-10-20 · TA获得超过1000个赞
知道小有建树答主
回答量:182
采纳率:0%
帮助的人:233万
展开全部
上半部分b[i] = a[i],等号代表变量的直接赋值,所以结果为A;
下半部分d[i] = c[i],你是NEW的两个对象,这里的等号代表指向同一堆,
所以一方数据改变另一方也发生变化。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
水牧兮
2011-10-17 · TA获得超过385个赞
知道小有建树答主
回答量:142
采纳率:0%
帮助的人:80万
展开全部
我不仔细看了,楼主肯定是C语言指针没学好,就去看java的
java 和c#的数组以及string 都是指针动态开的malloc,指向堆中的数据
比如 int * a= (int*)malloc(sizeof(int)*3);
int *b=a;
a[0]=1;a[1]=2;a[2]=3;
b[1]=4;
你说printf("%d\n",a[1]);那是多少
这个道理是一样的,string[]a和string[]b都指向的同一片堆中的数据
剩下的楼主自己琢磨下吧,讲的太明白了也不好
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ccgdyhy
2011-10-21
知道答主
回答量:7
采纳率:0%
帮助的人:11.8万
展开全部
User[] c = new User[3];
for (int i = 0; i < c.length; i++) {
c[i] = new User();
c[i].name = String.valueOf((char)('a' + i));
}
程序经过这个处理后:c[0].name="a"
User[] d = new User[3];
for (int i = 0; i < d.length; i++) {
d[i] = c[i];
}
这步处理之后:对于d[0]来说,它得到了c[0]的引用。
c[0].name = "z";
System.out.print(d[0].name);
经过上面的赋值后:c[0].name的实体变为了"z",那么d[0]自然得到c[0]的实体。所以程序会输出a和z
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
大多数人何必解释
2011-10-17
知道答主
回答量:25
采纳率:0%
帮助的人:4.1万
展开全部
上半部分String 之间是相当于是赋值的过程

而下半部分则是由于循环d[i]=c[i] 这种对象直接的赋值方式其实仅仅是一种引用罢了,所有他们的值应当是一致的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jaiye747
2011-10-18 · 超过21用户采纳过TA的回答
知道答主
回答量:77
采纳率:0%
帮助的人:49.2万
展开全部
因为d[i] = c[i];所以d[i]存放的是user对象的引用,改变c[i],d[i]也就随之改变

了解一下赋值和赋引用的区别
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式