请问一下,Java的 0 长数组初始化,以下两个写法是完全等价的吗?
如果是等价的,哪种用的比较多?
```java
public class Test {
Aoo[] as1 = new Aoo[0];
Aoo[] as2 = {};
}
```
请问一下,Java的 0 长数组初始化,以下两个写法是完全等价的吗?
如果是等价的,哪种用的比较多?
```java
public class Test {
Aoo[] as1 = new Aoo[0];
Aoo[] as2 = {};
}
```
测试程序:
@Test
public void testa (){
String[] as1 = new String[0];
String[] as2 = {};
System.out.println("as1:"+as1);
System.out.println("as1.length:"+as1.length);
System.out.println("as2:"+as2);
System.out.println("as2.length:"+as2.length);
long count=20000000000L;
Date start3=new Date();
for (long i=0;i<count;i++){
String[] as3 = new String[0];
}
System.out.println(count+"次 aa = new Array[0];耗时:"+(new Date().getTime()-start3.getTime()));
Date start4=new Date();
for (long i=0;i<count;i++) {
String[] as4 = {};
}
System.out.println(count+"次 aa = {};耗时:"+(new Date().getTime()-start4.getTime()));
}
执行结果:
as1:[Ljava.lang.String;@2a18f23c
as1.length:0
as2:[Ljava.lang.String;@d7b1517
as2.length:0
20000000000次 aa = new Array[0];耗时:8448
20000000000次 aa = {};耗时:7602
结论:
1、两种方式执行结果是一样的,都会创建对象。数组对象长度为0;调试过程中String[] as1 =new String[0]和String[] as2 = {} 都无法在单步进入下一层。PS:如果想要真的处理过程的差异,估计只能看一下编译器的代码。
2、执行20000000000次创建,耗时几乎差不多。对于本次贴出来的执行结果:8448、7602有800ms的差异,只是其中一次结果。次数增加时,也有过创建方式2>方式1的情况。和机器当是的负载有关。
3、把循环初始化as4的代码改为:
for (long i=0;i<count;i++) {
as2 = {};
}
会报编译错误:Array initializer is not allowed here 。