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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

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

评分

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

查看全部评分

29 个回复

倒序浏览
数组一旦初始化,长度就不能改了,不然的话数组自己直接自己增删数据了,那就不用总是转到集合区增删了。

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
那就有是一个数组了吧
回复 使用道具 举报
本帖最后由 ↘ふ紫铯幽夢 于 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};
复制代码
如何解释?

回复 使用道具 举报
↘ふ紫铯幽夢 发表于 2014-6-12 18:32
那好 请看,这样写就是对的。

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

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

回复 使用道具 举报
↘ふ紫铯幽夢 发表于 2014-6-12 18:39
那么这样写还是错的?

这样写,我试了一下,不行
我也不清楚为什么,规范上问题吧可能。
回复 使用道具 举报
↘ふ紫铯幽夢 发表于 2014-6-12 18:39
那么这样写还是错的?

int[] arr={1,2};是动态初始化了一个数组,并且直接进行了赋值,所以没有错误!!!
arr={1};这句就很搞笑了,arr是个引用类型变量,指向的是数组的内存地址,你却要给它赋值???编译能通过才怪!!!
最后再提一句,数组的所有操作都是基于角标操作的!!!

点评

赞一个  发表于 2014-6-14 15:06

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报 1 0
我来试试:int[] arr={1,2}; 初始化之后数组大小为2 ,而你这句arr={1}; 在修改arr指向当前引用的数组区域的数组大小。这样肯定是不行的 ,因为 java中数组一旦被初始化大小就固定。
若想改变数组可以这样:arr = new int[]{1}; 这样就更改了数组arr的引用(即数组指针指向的位置改变了)
回复 使用道具 举报
数组常量只能在初始化操作中使用,你在初始化之后再对数组赋值肯定会报错。

点评

赋值不是应该arr[0] = 1 这样写吗?  发表于 2014-6-14 13:54
回复 使用道具 举报
你是想给arr数组再赋值个1还是什么意思?arr数组初始化一次后,已经存在于内存中了,你举得例子中已经规定了lenth为2了,所以肯定不能再追加数据。arr ={1}是想直接给对象赋值?没这种写法把。
回复 使用道具 举报
这个代码怎么可能允许?编辑器不知道你数组的角标
回复 使用道具 举报
百度到的,
回复 使用道具 举报
 一维数组 
                1)   int[] a;   //声明,没有初始化 
                 
                2)   int[] a=new int[5];   //初始化为默认值,int型为0  
                3)   int[] a={1,2,3,4,5};   //初始化为给定值   
                4)   int[] a=new int[]{1,2,3,4,5};   //同(3)   
                     int[] a=new int[5]{1,2,3,4,5};   //错误,如果提供了数组初始化操作,则不能定义维表达式  
                 
                5)   int[] a;    
                     a=new int[5];    //正确,同(2)一样 
                int[] a; 
                      a={1,2,3,4,5};   //错误,数组常量只能在初始化操作中使用,如(3) 
                 
                6)   int a[]; 
                     a[0]=1;   //错误,因为数组没有初始化,不能赋值      a[1]=2;

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报 1 0
alive 中级黑马 2014-6-12 22:24:54
15#
数组的长度是固定不变的。。。。
回复 使用道具 举报
↘ふ紫铯幽夢 发表于 2014-6-12 18:32
那好 请看,这样写就是对的。
下面这样写又是错的:
如何解释?

其实很容易理解,只需要记住常量数组能能应用于数组初始化的工程中。数组的赋值不能一次性用常量数组赋值,要一个个进行赋值
回复 使用道具 举报
你在定义的时候已经初始化了,你下面一句又一次给赋值,这样很明显回事错误的
回复 使用道具 举报
int[] arr={1,2};
arr={1};  //{1}不是数组吧,应该是arr=new int[]{1}
回复 使用道具 举报
arr代表的是一个地址,一个引用,第二句话把一个具体的对象赋值给一个引用,我觉得是这里出的问题吧
回复 使用道具 举报
一句话 arr是引用类型 只能被对象所指向! 所以arr = {1} 是不允许的
int[] arr={1,2}; 之所以这个可以,是因为右边是一种特殊的初始化方式,相当于new int[]{1,2}
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马