java文件中 int[] ary = {4,5,6};
    int[] ary1 = ary;
    ary1[1]=8;
    System.out.println(ary[1]);//8现问:1数组中元素值放在哪,是放在栈中吗,
   2ary[1]为什么也会改呢,怎么会为8呢

解决方案 »

  1.   

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

  2.   


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

  3.   

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

  4.   

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

  5.   

    1楼说了,ary1、ary指向堆中的同一个地址
    ary[1]=ary1[1]  
    他们的值是相等的,你自己吧ary1[1]=8;
    当然5替换成8了
      

  6.   

    1、可以这样写个,int[] ary = new int[3];int[] ary = {4,5,6};
    ary指向堆内存中,ary只是引用,存在栈中,而ary[i]是开辟在堆内存中的。地址和值都在堆内存中。2、ary赋值给ary1是表示把ary1也是指向堆内存中,所以只要ary1[1]=8;ary和ary1都会跟着变的。讲个通俗点的例子,到你家可能有很多种方式,但是只要你家换位置了,这些方式都要改变。以上个人理解,互相讨论。
      

  7.   

    java中:万物皆对象。数组也不例外
    ary与ary1是数组的引用,在栈中。
    int[] ary = {4,5,6};只是一种初始化方式,等价于int[] ary = new int[]{4,5,6};===>new出来的空间在堆里。
    如果未初始化,会默认初始化为0(所有元素)。ary[1]为什么也会改呢?ary[1]类似于成员变量,为什么不能改呢?!!!
      

  8.   

    存储数据的地方你可以理解为两个地方,一个是栈、一个是堆。
    int[] ary = {4,5,6};
      int[] ary1 = ary;
      ary1[1]=8;
      System.out.println(ary[1]);//8其中arr放在栈内存中,它内部含有一个值,是指向放在堆内存中的数据引用地址,
    当你在int[] ary1 = ary;的时候就是把内存地址复制给了arr1,所以不管改变哪个引用中的值,都会影响到另外一个
      

  9.   

    1 ary1[1]=8;
    是把5的值改成8了吗,
    2 4,5,6 是一个对象吗,
      

  10.   

    其实可以画个图来解决 ,假设ary的地址是6000,然后你写int ary1=ary,相当于把ary1的地址也赋成6000,然后你改变了其中的值,也就是说6000这个地址对应的内容发生了改变,那么你再读ary时,当然读的是6000这个地址对应的内容了啊
              ------
            |      |
            |      |
            |------|
            |ary   |
             ------
      

  11.   


     ary1[1]=8;
    这个难道不是赋值吗?
    4,5,6 放在数组里的,可以说是一个对象,可以说是三个不同的对象,这样看你怎么理解了,
    在java中,所有都是对象,连一个类都是对象