为了账号安全,请及时绑定邮箱和手机立即绑定

java小程序中数组赋值问题

java小程序中数组赋值问题

Smart猫小萌 2019-04-26 19:15:56
public class example2{public static void main(String args[]){int a[]={1,2,3,4};int b[];System.out.println(a[3]);b=a;b[3]=100;System.out.println(a[3]);System.out.println(b[3]);}}新手。。。输出结果为4.100.100。想问一下为何a数组也变了。
查看完整描述

7 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

数组是引用类型变量,int a[] ={1,2,3,4};中值{1,2,3,4}是存放在堆内存中,而变量是在栈内存中,
当b=a赋值是使b指向到堆内存中的值,所以在给b数组修改变量时是将堆内存中的值改变了,
同时a数组也是指向同一个堆内存的地址上的值,所以a输出出来也是改变过得。

查看完整回答
反对 回复 2019-05-07
?
倚天杖

TA贡献1828条经验 获得超3个赞

数组的复制方法现在至少有四个思路:

  1 使用循环结构 这种方法最灵活。唯一不足的地方可能就是代码较多

  2 使用Object类的clone()方法, 这种方法最简单,得到原数组的一个副本。灵活形也最差。效率最差,尤其是在数组元素很大或者复制对象数组时。

  3 使用Systems的arraycopy这种方法被告之速度最快,并且灵活性也较好,可以指定原数组名称、以及元素的开始位置、复制的元素的个数,目标数组名称、目标数组的位置。

  4 Arrarys类的copyOf()方法与copyOfRange()方法可实现对数组的复制


查看完整回答
反对 回复 2019-05-07
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

因为b=a是让b指向了a,而不是复制了一个数组


查看完整回答
反对 回复 2019-05-07
?
手掌心

TA贡献1942条经验 获得超3个赞

int a[]={1,2,3,4};//只是让a指向了数组{1,2,3,4};
b=a//让b也指向了数组{1,2,3,4};
a和b的值都只是数组{1,2,3,4}的引用。所以因为指向了同一个数组对象,数组变了,a,b的值也都跟着变了。

a,b中实际存储的都只是数组对象{1,2,3,4}在内存中的地址。数组的值变了,但a,b中的数组对象的地址是没变的。

查看完整回答
反对 回复 2019-05-07
?
青春有我

TA贡献1784条经验 获得超8个赞

建议去看下java运行时堆和栈及常量区这些基础的概念,应该能对这个问题有更清晰的了解


查看完整回答
反对 回复 2019-05-07
?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

引用数据类型 你这里的b[]的内存地址跟a[]一样的 所以你改变b[] a[]也就变了


查看完整回答
反对 回复 2019-05-07
  • 7 回答
  • 0 关注
  • 713 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号