Jayson_Dai 2022-08-05 14:53 采纳率: 66.7%
浏览 90
已结题

java的0长数组初始化。

请问一下,Java的 0 长数组初始化,以下两个写法是完全等价的吗?
如果是等价的,哪种用的比较多?


```java

public class Test {

    Aoo[] as1 = new Aoo[0];

    Aoo[] as2 = {};

}

```

  • 写回答

8条回答 默认 最新

  • undefine攻城狮 2022-08-05 18:38
    关注

    测试程序:

    @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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(7条)

报告相同问题?

问题事件

  • 系统已结题 8月16日
  • 已采纳回答 8月8日
  • 创建了问题 8月5日

悬赏问题

  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探