A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

下面的程序怎么解释呢?x=new int[2];这句谁能解释清楚些?感谢了
  1. public class Test {
  2. public static void main(String[] args) {
  3. int[] x = {1, 2, 3, 4};
  4. int[] y = x;

  5. x = new int[2];   //原数组是4个元素的,现在定义为2个元素的,为什么编译器不出错呢?

  6. for (int i = 0; i < y.length; i++)
  7. System.out.print(y[i] + " ");
  8. }
  9. }

复制代码

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1 淡定

查看全部评分

10 个回复

倒序浏览
那是因为你又给数组开辟了一个新天地哇,就是内存空间,所以指针就指向这个新的数组而不是指向老的数组了,所以就不会出错了。个人理解~
回复 使用道具 举报
x指向了一个新的数组的内存地址。
回复 使用道具 举报
数组是固定长度的。。。一旦生成就没办法改变
x = new int[2];
这句话的意思是重新生成了一个数组对象长度为2
默认值为0
原来X的数组的值还在。。只不过你指向了一个新生成的数组。
回复 使用道具 举报
x只是一个引用,指向一个数组,而不是含有n个数组元素。

x = new int[2];  这句把x改为对new int[2]数组的引用了。
回复 使用道具 举报
java 中 只要使用new就会重新开辟一个新的内存空间,x = new int[2],指向了一个新的内存空间,所以不会报错
回复 使用道具 举报
x.love 中级黑马 2013-6-14 15:21:07
7#
很明显啊,x=new int[2] 中x又被重新赋值了啊
回复 使用道具 举报
x是一个int型的数组变量,本来指向初始化的数组,x=new一个数组对象之后,就把这个地址又传递给了变量x(x内部保存的实际是数组的地址)
回复 使用道具 举报
x只是一个引用类型,你重新赋值的时候,改变的不是x,而是x的指向,所以不会报错
回复 使用道具 举报
x = new int[2]这是新开辟了一个内存空间 x指向新的数组
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马