找了一下发现网上只说就这么定义的,哪位大神能帮忙解释一下根本原因?是不是能从虚拟机的角度解释一下?谢谢啦!
eg.
String s[] = new String[] {"1","2","3"};正确 String s[] = {"1","2","3"};正确 String s[] = new String[3] {"Zero","One","Two"};错误
认证0级讲师
陣列初始化就是取得該陣列的固定容量,{"","",""}的方式能取得陣列的固定容量,順帶把每個元素都賦值,
new String[3]的方式也能告知編譯器該陣列的固定容量,順帶把每個元素都置為null,
但是兩種方式同時規範該數組的固定容量,在語法上有產生矛盾衝突的風險,
例如new String[4]{"","",""},
所以為了避免這樣的歧義,從語法上就應該禁止這種同時規範數組容量的寫法
文法這麼規定的。 。 。 跟虛擬機器沒有啥關係
https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.10.1
數組申請的是一塊固定大小的記憶體區
陣列初始化就是取得該陣列的固定容量,
{"","",""}的方式能取得陣列的固定容量,順帶把每個元素都賦值,
new String[3]的方式也能告知編譯器該陣列的固定容量,順帶把每個元素都置為null,
但是兩種方式同時規範該數組的固定容量,在語法上有產生矛盾衝突的風險,
例如new String[4]{"","",""},
所以為了避免這樣的歧義,從語法上就應該禁止這種同時規範數組容量的寫法
文法這麼規定的。 。 。
跟虛擬機器沒有啥關係
https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.10.1
數組申請的是一塊固定大小的記憶體區