日期:2014-05-20  浏览次数:20734 次

数组中元素值放在哪,在线等
java文件中

 int[] ary = {4,5,6};
  int[] ary1 = ary;
  ary1[1]=8;
  System.out.println(ary[1]);//8

现问:1数组中元素值放在哪,是放在栈中吗,
   2ary[1]为什么也会改呢,怎么会为8呢

------解决方案--------------------
放在堆中, ary1、ary才是放在占中,ary1、ary指向堆中的同一个地址,也就是放{4,5,6}的地址;
------解决方案--------------------

首先你自己定义死了一个数组int[] ary = {4,5,6};里面的值分别 4 、5 、6
如果你想再改数组里添加一个数组,你ary1[1]=8;当然不下标为1 的值“5”替换了改成为8,
如果你想把8插入里面,你可以自己在new 一个 长度大于3的数组, int] str=new String[4];
然后你吧自己的数组跟8往里面添加,就可以了,其次你说这些元素值放在哪里,当然是堆里面,因为数组时一个对象
------解决方案--------------------
探讨

ary1[1]=8;
ary[1]为什么也会改呢,怎么会为8呢 thanks

------解决方案--------------------
1、可以这样写个,int[] ary = new int[3];int[] ary = {4,5,6};
ary指向堆内存中,ary只是引用,存在栈中,而ary[i]是开辟在堆内存中的。地址和值都在堆内存中。

2、ary赋值给ary1是表示把ary1也是指向堆内存中,所以只要ary1[1]=8;ary和ary1都会跟着变的。

讲个通俗点的例子,到你家可能有很多种方式,但是只要你家换位置了,这些方式都要改变。

以上个人理解,互相讨论。
------解决方案--------------------
java中:万物皆对象。数组也不例外
ary与ary1是数组的引用,在栈中。
int[] ary = {4,5,6};只是一种初始化方式,等价于int[] ary = new int[]{4,5,6};===>new出来的空间在堆里。
如果未初始化,会默认初始化为0(所有元素)。ary[1]为什么也会改呢?ary[1]类似于成员变量,为什么不能改呢?!!!
------解决方案--------------------
数组是引用类型滴,不同的变量名指向同一个地址,内容改变了,不管哪个变量来引用,结果都是8
------解决方案--------------------
引用数据类型
------解决方案--------------------
存储数据的地方你可以理解为两个地方,一个是栈、一个是堆。
Java code
int[] ary = {4,5,6};
  int[] ary1 = ary;
  ary1[1]=8;
  System.out.println(ary[1]);//8

------解决方案--------------------
其实可以画个图来解决 ,假设ary的地址是6000,然后你写int ary1=ary,相当于把ary1的地址也赋成6000,然后你改变了其中的值,也就是说6000这个地址对应的内容发生了改变,那么你再读ary时,当然读的是6000这个地址对应的内容了啊
------
| |
| |
|------|
|ary |
------
------解决方案--------------------
探讨
1 ary1[1]=8;
是把5的值改成8了吗,
2 4,5,6 是一个对象吗,