yanxin4501
2015-01-10 06:21
采纳率: 100%
浏览 2.2k
已采纳

java小程序中数组赋值问题

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条回答 默认 最新

  • hhdxiaoh 2015-01-10 23:34
    已采纳

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

    已采纳该答案
    打赏 评论
  • threenewbee 2015-01-10 06:46

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

    打赏 评论
  • threenewbee 2015-01-10 06:46

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

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

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

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

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

    打赏 评论
  • threenewbee 2015-01-10 06:47
    打赏 评论
  • 微风吹过的夏天2016 2015-01-10 06:56

    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的值也都跟着变了。

    打赏 评论
  • 牛刀杀鸡 2015-01-10 08:43

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

    打赏 评论
  • 空-城旧-梦 2015-01-10 15:47

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

    打赏 评论

相关推荐 更多相似问题