为了账号安全,请及时绑定邮箱和手机立即绑定

在Java中,为什么对数组进行静态初始化时,可以省略关键字new?

在Java中,为什么对数组进行静态初始化时,可以省略关键字new?

玄天 2017-07-28 23:17:17
int a[] = {1, 2, 3};int b[] = new int[] {1, 2, 3};前者没有使用关键字new,为什么不报错呢?
查看完整描述

4 回答

已采纳
?
yeehom

TA贡献2条经验 获得超4个赞

这是由于java设计之初为了契合用户习惯做得妥协(也可以说是优化)。


大家都知道java是1995年设计出来的,相比c(1972年)、c++(1983年)这些语言来说是后起之秀。而c、c++定义数组习惯使用 int a[] = {1, 2, 3}; 这样的方式。因此java也顺势继承了下来


java作为纯面向对象语言,同时数组在java中以对象形式存在。这种写法咋看之下违背了对象创建的方式,而它实际上只是一种语法糖(简化写法)。编译器遇到 int a[] = {1, 2, 3}; 会编译成和 int a[] = new int[] {1, 2, 3}; 完全一样的中间代码。


因此 int a[] = {1, 2, 3};int a[] = new int[] {1, 2, 3}; 实际上是等价的,任何一种写法都能正确编译,所以当然不会报错了。

查看完整回答
3 反对 回复 2017-07-29
?
慕雪9135782

TA贡献2条经验 获得超7个赞

Java中定义数组的方式有三种:

int[] arr1=new int[10];  

int[] arr2=new int[]{1,2,3,4,5,6};  

int[] arr3={1,2,3,6};  


第一种在定义时确定下数组的长度,java中数组长度一旦被定义了就不能在改变它的长度length,基本类型的数组,其中的元素的默认值为基本类型的默认值,比如说int默认值为0,这里面所有元素的默认值都为0,引用类型的数组其元素的默认值为null;

第二组定义方式是将数组定义时,同时将数组内部元素给确定下来;

第三种与第二种的结果相同,只不过是定义方式不同而已,你可以理解为,同一个结果只不过是不同的实现罢了.不用太纠结,

查看完整回答
3 反对 回复 2017-07-28
  • 玄天
    玄天
    感谢耐心指点!但是抱歉,我只能采纳一个...
?
showface

TA贡献1条经验 获得超0个赞

以我的理解,new是在堆中开辟了一块区域,第一种是在常量池中定义的,内容上无区别,但是底层开辟的原理不同。不知道技术到家了没。

查看完整回答
反对 回复 2017-07-29
?
秃头披风侠0

TA贡献24条经验 获得超12个赞

C++11的语法声明并初始化数组连等号都可以不要 ,人家编译器支持这种语法格式就不要非要去区别两种方式了 ,太底层的实现等自己技术很扎实了再去研究吧

查看完整回答
反对 回复 2017-07-29
?
大大丶布维

TA贡献12条经验 获得超117个赞

嗯……我该怎么解释呢,右边有大括号的时候,我们都是用第一种方法的,下面的方法我们是用来定义空数组的
int[] b=new int[5];
而你的第二种定义方式,我还真的第一次见,不好意思,让你见笑了

查看完整回答
反对 回复 2017-07-28
  • 4 回答
  • 0 关注
  • 3867 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信