这种语法有区别吗?

Spa*_*ost 0 java arrays object

我想知道在两种情况下是否都创建了MyObject对象.如果没有,为什么两种情况都能正常工作?

MyObject[] abcd = new MyObject[8];
abcd[0] = MyObject();
String str = abcd[0].someMethod();
Run Code Online (Sandbox Code Playgroud)

MyObject[] abcd = new MyObject[8];
String str = abcd[0].someMethod();
Run Code Online (Sandbox Code Playgroud)

我知道在第一个例子中,MyObject数组是用8个元素创建的,并存储在该数组的引用变量abcd中.我有一个MyObject引用数组,但没有实际的MyObject对象.所以我创建了这些对象,第一个对象存储在数组0中.

在第二个例子..是同样的事情,只是更短的代码?

*已编辑:忘记添加[]我道歉.*

Rei*_*eus 6

假设你的意思

MyObject[] abcd = new MyObject[8];
abcd[0] = new MyObject();
String str = abcd[0].someMethod();
Run Code Online (Sandbox Code Playgroud)

这样可以正常工作.

第二个版本将抛出一个NullPointerException 除非 someMethod碰巧static.在这种情况下,Java不依赖于static为要调用的方法创建的实例.