亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在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 關注
  • 3966 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號