gpt4 book ai didi

java - 对于空列表中的每个循环

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:44:33 25 4
gpt4 key购买 nike

如果我们在空集合中执行 foreach 循环,将不会执行任何操作。但是,当集合为空时,结构应该如何工作?

Collection<String> c=null;
....
for(String item:c){
println(item);
}

我可以运行代码并查看空引用异常。但是行为到底应该是什么?我找不到任何相关的手册页。

我知道异常是在header处抛出的,因为collection是null。但我想知道异常是如何抛出的。这可以通过 if 或 Objects.requireNonNull() 或其他一些方式来完成,或者如 David 的回答中所示。

最佳答案

编译后的增强 for(或 foreach)在引擎盖下使用 Iterator 迭代集合,如 JLS 所述:

The enhanced for statement is equivalent to a basic for statement of the form:

for (I #i = Expression.iterator(); #i.hasNext(); ) {    {VariableModifier} TargetType Identifier =        (TargetType) #i.next();    Statement}

你可以通过查看编译后循环的反汇编代码来检查你自己 (javap -c) :

  3: invokeinterface #2,  1            // InterfaceMethod java/util/Collection.iterator:()Ljava/util/Iterator;  8: astore_2  9: aload_2 10: invokeinterface #3,  1            // InterfaceMethod java/util/Iterator.hasNext:()Z 15: ifeq          38 18: aload_2 19: invokeinterface #4,  1            // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object; 24: checkcast     #5                  // class java/lang/String 27: astore_3 28: getstatic     #6                  // Field java/lang/System.out:Ljava/io/PrintStream; 31: aload_3 32: invokevirtual #7                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V 35: goto          9

So, it is like if you had written :

Collection<String> c = null;
for (Iterator<String> iterator = c.iterator(); iterator.hasNext();) {
String item = iterator.next();
}

null 上调用 iterator() 会抛出一个 NullPointerException

关于java - 对于空列表中的每个循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49445634/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com