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);
}
} 展开
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);
}
} 展开
7个回答
展开全部
上半部分b[i] = a[i],等号代表变量的直接赋值,所以结果为A;
下半部分d[i] = c[i],你是NEW的两个对象,这里的等号代表指向同一堆,
所以一方数据改变另一方也发生变化。
下半部分d[i] = c[i],你是NEW的两个对象,这里的等号代表指向同一堆,
所以一方数据改变另一方也发生变化。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我不仔细看了,楼主肯定是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都指向的同一片堆中的数据
剩下的楼主自己琢磨下吧,讲的太明白了也不好
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都指向的同一片堆中的数据
剩下的楼主自己琢磨下吧,讲的太明白了也不好
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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
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
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
上半部分String 之间是相当于是赋值的过程
而下半部分则是由于循环d[i]=c[i] 这种对象直接的赋值方式其实仅仅是一种引用罢了,所有他们的值应当是一致的
而下半部分则是由于循环d[i]=c[i] 这种对象直接的赋值方式其实仅仅是一种引用罢了,所有他们的值应当是一致的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为d[i] = c[i];所以d[i]存放的是user对象的引用,改变c[i],d[i]也就随之改变
了解一下赋值和赋引用的区别
了解一下赋值和赋引用的区别
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询