java问题

[复制链接]
查看11 | 回复4 | 2011-6-4 20:51:34 | 显示全部楼层 |阅读模式
小弟是java新手,有个问题:
public class my{
        public static void main(String[] args) {
                int a[]={100,200,300};
                int b[]={10,20,20,50,40,};
                b=a;
                b[0]=123456;

System.out.println(a[0]+","+a[1]+","+a[2]);

System.out.println(b[0]+","+b[1]+","+b[2]);
        }
}
为什么b[0]=123456,是因为被分配同一内存?
说错啦,是a[0]=123456,为什么?

回复

使用道具 举报

千问 | 2011-6-4 20:51:34 | 显示全部楼层
b=a;//数组复制不能这样做的,这样就是把a的地址赋给b,让b指向了a数组b[0]=123456;//你这里又给b[0]赋值为123456,也就是改了a[0],a[0]在后面输出的时候当然是123456b=a.clone();//数组复制可以这样写b[0]=123456;//这样a[0]就不会被修改成123456了...
回复

使用道具 举报

千问 | 2011-6-4 20:51:34 | 显示全部楼层
这么说吧,你是a,我是b,你我都是钥匙,我管壁橱1,你管壁橱2,但老大让我也管壁橱2,也就是说你和我有同样的功能,我把壁橱的第一层的100改为123456,当你在看时,你就会发现第一层是123456。...
回复

使用道具 举报

千问 | 2011-6-4 20:51:34 | 显示全部楼层
{100,200,300};这个对象一开始只被int[] a 引用所指向着。后来b=a;这一句导致int[] b引用也指向这个数组对象。操作b[0]的时候,就会将这个数组中的第一个元素进行更改。但是因为,a引用也指向这个数组,那么a[0]和b[0]、a[1]和b[2]、a[2]和b[2]必然分别都是同一数据。...
回复

使用道具 举报

千问 | 2011-6-4 20:51:34 | 显示全部楼层
因为最后你给b[0]赋值了啊,最后执行的是b[0]=123456;...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行