新学java ,问一个关于数组的问题

publicclassarr{publicstaticvoidmain(String[]args){int[]a={2,3,4,7,8,9};int[]b;b=a;for... public class arr{
public static void main(String[] args){
int[] a={2,3,4,7,8,9};
int[] b;
b=a;
for(int i=0;i<a.length;i++){
b[i]++;
System.out.println("a["+i+"]="+a[i]);
//System.out.println("b["+i+"]="+b[i]);

}
}
}
为什么结果输出是:a[0]=3;

b[0]=3;
a[1]=4;

b[1]=4;
a[2]=5;

b[2]=5;
a[3]=8;

b[3]=8;
a[4]=9;

b[4]=9;
a[5]=10;

b[5]=10;
b数组输出结果我到知道没有错。但是为什么a数组与b数组是一样结果?for循环语句中b[i]++会影响到a数组值吗?
展开
 我来答
嘟爷他巴
推荐于2016-04-16 · TA获得超过267个赞
知道小有建树答主
回答量:119
采纳率:0%
帮助的人:177万
展开全部

= 是赋值的意思,但如果被赋的值是一个对象,那么,被赋值的变量和赋值的变量拥有同样的引用(在C++中为指针)。在JAVA中除了基本类型赋值(byte, short, int, long, float, double, boolean)外,全部都是对象。所以,b被改动后,a也一样,因为 a == b。如果想b != a(即改动a或者b时,互不影响,拥有不同的引用),不能简单的使用 “=”。

你有很多种方法实现:

1、使用 java.util.Arrays 数组工具类中的 copyOf 方法:

int[] b = Arrays.copyOf(a, a.length);

2、自己使用 for 循环实现(实际上就是上面的方法):

int[] b = new int[a.length];
for (int i = 0; i < a.length; i++) {
    b[i] = a[i];
}

但又出现一个问题,如果数组中的元素是对象呢?有办法,如果是 Byte, Short, Integer, Long, Boolean, Float, Double, String,只要使用相应的 valueOf() 方法重新构造一个对象就可以了,如果是其他对象,那么需要对象实现 Cloneable 接口,并且重写 clone 方法,实现深度克隆,才能完成实现非引用拷贝 。

思乡的火星人
2014-08-03 · TA获得超过260个赞
知道小有建树答主
回答量:352
采纳率:0%
帮助的人:243万
展开全部

b=a;这一句,并不是说吧a数组中的每个元素都复制了一份,然后赋值给b,而是将a数组的指针赋值给b,也就是a和b指向的是同一个数组,是同一个数组的两个名字。

举例来说,

Double d1 = new Double();
Double d2 = d1;

这个时候,d1和d2是同一个对象的两个引用(或者两个名字)。

如果想是两个不同的对象,应该这么写:

Double d1 = new Double();
Double d2 = new Double();

更深入的java的内存的只是,建议你去看下:http://www.cnblogs.com/xwdreamer/archive/2012/04/01/2428857.html


如果你学的是C或者C++,这些问题是一开始就要懂得。java语言简化了这些,但是也逃不过这个坎。

追问
多谢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-08-03
展开全部
因为b=a这句话呀。。。使他们共用了同一块堆地址。
java中变量如a,b是存放在栈里的,而实际数据是存放在堆里的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友12ee0fd
2014-08-03 · TA获得超过4.7万个赞
知道大有可为答主
回答量:1.1万
采纳率:66%
帮助的人:2346万
展开全部
b[i] ++ 和 b[i] = b[i]++ 不一样
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式