【问题标题】:Do array types in Java have `forEach()` method, just as `Iterable` does? [duplicate]Java 中的数组类型是否有 `forEach()` 方法,就像 `Iterable` 一样? [复制]
【发布时间】:2017-11-21 10:25:03
【问题描述】:

foreach 循环适用于Iterable 接口和数组类型。

它通过调用Iterable接口的forEach方法来工作。

Java 中的数组类型是否有 forEach() 方法,就像 Iterable 一样? foreach 循环是否也可以通过数组类型的forEach 方法对数组类型起作用?

我已阅读 How does primitive array work with new for each loop in Java?,但我不确定它是否回答了我的问题。

【问题讨论】:

  • array 是原始类型,原始类型没有任何方法
  • 数组类型是引用类型,不是原始类型
  • 您可以使用 Arrays.stream。例如Arrays.stream(new int[]{1,2,3,4}).forEach(it -> System.out.println(it));
  • @Joe Arrays是引用类型的,无论是原始数组还是引用类型的数组,都有以下方法,大部分但不是全部继承自java.lang.Objectclone(),@ 987654332@, equals(), toString(), wait(), notify(), notifyAll(), ... 另外,他们实现了SerializableCloneable接口。

标签: java


【解决方案1】:

foreach 循环适用于 Iterable 接口和数组类型。

正确。

它通过调用Iterable接口的forEach方法来工作。

不,它没有。

Java 中的数组类型是否有 forEach() 方法,就像 Iterable 一样?

没有。请参阅here 了解他们拥有的详细信息。

foreach 循环是否也适用于数组类型的 forEach 方法?

没有。

我已阅读 Java 中的每个循环的原始数组如何与 new 一起工作?,但我不确定它是否回答了我的问题。

确实如此。

【讨论】:

    【解决方案2】:

    Java 8 中在Iterable 接口中引入的forEach 方法与你所说的“foreach 循环”无关(实际名称为增强的for 循环)。

    增强的 for 循环是在较早的 Java 版本中引入的,并且不使用 forEach() 方法。它使用由实现Iterable 的类实现的iterator() 方法。对于数组,它无需迭代器即可工作。它只是使用数组的索引来循环元素。

    【讨论】:

    • 谢谢。什么时候使用IterableforEach方法,如果在foreach循环中不使用?
    • @Ben 当您编写使用它的代码 + 一些使用它的 JDK 代码时 - 例如,Collections.CheckedCollection<E> 调用它(我刚刚进行了搜索并发现)。
    • 调用IterableforEach方法的代码总是可以被使用foreach循环的代码替换是否正确?
    • @Ben 我相信是的。您始终可以将传递给 forEach() 方法的 Consumer 的主体转储到 foreach 循环的主体中。
    猜你喜欢
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    • 2023-03-11
    • 2016-06-01
    • 2019-10-10
    相关资源
    最近更新 更多