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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 ↘ふ紫铯幽夢 于 2014-6-12 16:24 编辑

请看下面代码 ,为什么会报错?
int[] arr={1,2};
arr={1};
谁能详细解释下,为什么这样写不允许。。。。。。

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1 带着问题来思考,给你个赞!~

查看全部评分

29 个回复

倒序浏览
本帖最后由 ↘ふ紫铯幽夢 于 2014-6-12 18:36 编辑
Gaara33 发表于 2014-6-12 17:10
数组一旦初始化,长度就不能改了,不然的话数组自己直接自己增删数据了,那就不用总是转到集合区增删了。 ...
  1. int[] arr={1,2};
  2. arr=new int[]{1};
复制代码
那好 请看,这样写就是对的。
下面这样写又是错的:
  1. int[] arr=new int[]{1,2};
  2. arr={3,4};
复制代码
如何解释?

回复 使用道具 举报
Gaara33 发表于 2014-6-12 18:36
你这个是又新建了一个对象,第一句对应的对象已经被你舍弃了,arr指向了一个新的数组对象,之前的代码中 ...

那么这样写还是错的?
  1. int[] arr=new int[]{1,2};
  2. arr={3,4};
复制代码

回复 使用道具 举报
格子、 发表于 2014-6-12 19:23
int[] arr={1,2};是动态初始化了一个数组,并且直接进行了赋值,所以没有错误!!!
arr={1};这句就很搞 ...

那如果想你说的那样 :那请看下面
  1. int[] arr=new int[]{1,2};
  2. arr =new int[]{2};
复制代码
照你说的,这样写是不会通过编译的,但是这样写是对的。
回复 使用道具 举报
HF_Opticalix 发表于 2014-6-12 23:15
一句话 arr是引用类型 只能被对象所指向! 所以arr = {1} 是不允许的
int[] arr={1,2}; 之所以这个可以,是 ...

既然arr是引用类型,那么arr={1}; {1}也是一个对象,就像你说的相当于new int[]{1}那摩就应该合理啊
回复 使用道具 举报
ixiangfeng 发表于 2014-6-12 23:07
arr代表的是一个地址,一个引用,第二句话把一个具体的对象赋值给一个引用,我觉得是这里出的问题吧 ...

引用类型的变量就是用来指定对象的啊
回复 使用道具 举报
西门吹风 发表于 2014-6-12 22:53
int[] arr={1,2};
arr={1};  //{1}不是数组吧,应该是arr=new int[]{1}

那照你说{1,2}也不是数组?
回复 使用道具 举报
云的牧羊人 发表于 2014-6-12 19:31
你是想给arr数组再赋值个1还是什么意思?arr数组初始化一次后,已经存在于内存中了,你举得例子中已经规定 ...

我的意思是arr是一个引用类型变量,先初始化一个值后,在用arr这个变量去指向一个新的数组,按道理是可以的,把arr={1}这句改成arr=new in[]{1} 是可以的。。

点评

该成new一个对象肯定是可以的啊,关键是前面是没有new的啊,数组arr定义好长度后不能直接添加元素了啊  发表于 2014-6-16 19:25
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马