我有一个关于这个 foreach 的问题:
for(Element e : nullProof(setOfElements)){
// do stuff
}
假设我定义了函数 nullProof,以返回一个非 null Set(因为我听说你不应该将 null 传递到增强的 for 循环中。这是真的吗?):
private Set<Element> nullProof(Set<Element> s){
return s == null ? Collections.<Element> emptySet() : s;
}
我的问题是...在 foreach 中调用 nullProof 函数是否安全?具体来说,以下 header 相当于:
for(Element e : setOfElements){ //assuming setOfElements != null
我想知道是否有人可以向我指出一些 Java 标准,该标准表明这是定义的行为。
此外,有人可以解释调用此 foreach 时“幕后”实际发生的情况吗?
假设 setOfElements 的大小为 6。对于 setOfElements 的每次迭代,JVM 会查找 setOfElements 6 次不同的时间吗?创建该集的副本并引用该副本?我正在尝试理解这种行为。感谢您的帮助!
最佳答案
是的,它非常安全。
for(Element e : nullProof(setOfElements)) {
相当于
Set<Element> s = nullProof(setOfElements);
for(Element e : s) {
如 JLS-14 中所述,在幕后 foreach 循环相当于:
for(Iterator<Element> it = s.iterator() ; it.hasNext() ; ) {
Element e = it.next();
// ...
}
关于java - Java foreach 是否创建副本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28351773/