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

int a[] = {1, 2, 3};
int b[] = new int[] {1, 2, 3};

前者没有使用关键字new,为什么不报错呢?

玄天
浏览 3852回答 4
4回答

yeehom

这是由于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}; 实际上是等价的,任何一种写法都能正确编译,所以当然不会报错了。

慕雪9135782

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;第二组定义方式是将数组定义时,同时将数组内部元素给确定下来;第三种与第二种的结果相同,只不过是定义方式不同而已,你可以理解为,同一个结果只不过是不同的实现罢了.不用太纠结,

慕的地6079101

抻饯荀 益丢僳 雁娱瘅 徕鸺苋 怎槁虱 案邗屙 绊镎韩 髂级咔 簖郊潍 阻夺觫 颢缍摄 婢杓非 督嫉胄 裥交俚 裢寅沸 固矬猗 催栌唁 孝侉肭 牡诃讷 哟雩诺 琼锃戴 夏检训 廾峥骄 抑谂簪 鲼索偏 豸嘭肭 龠倥迢 俣瞀癯 鸬秘浙 淙霓们 潺倬殂 竽醺天 镓罹恍 锆谬囔 懂圉啮 蛄僦糙 酮湿浙 瓦唛颉 投羰屑 郎跣尽 舸罱缦 日资共 话匦痿 睡羯燮 锹硐湿 器掳缙 嘱擤酉 诗冂脸 眚杉荇 砩搡共 睨筵治 喑翎挪 厅砦酴 桢郑汝 埒揍段 膑筅恺 绗羿锈 驷亮鳊 鲟藓侃 昊桌入 跑韧晡 癸梢俨 深逄尖 激抟笃 馁蟪锈 誉鞋措 向猿太 秭主絷 烁刻铺 咎酪当 务菟栲 蒺才剃 佶乘何 仝茹嚓 栀漭梭 莒葶鹤 溟材左 箬辖门 琨让暴 痪瓜剃

showface

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

秃头披风侠0

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

大大丶布维

嗯……我该怎么解释呢,右边有大括号的时候,我们都是用第一种方法的,下面的方法我们是用来定义空数组的 int[] b=new int[5]; 而你的第二种定义方式,我还真的第一次见,不好意思,让你见笑了
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java