한 시나리오는 첫 번째 스 니펫).
여기에 (당신이 어떤 의심이 있으면 자신이 실행하시기 바랍니다) 예입니다 :
import java.util.*;
public class ForEachVS {
static List<Integer> players;
static void process(int i) {
System.out.println(i);
players = null;
}
public static void main(String args[]) {
players = Arrays.asList(1,2,3);
for (int p : players) {
process(p);
} // this processes 1,2,3
players = Arrays.asList(1,2,3);
for (int i = 0; i < players.size(); i++) {
process(players.get(i));
} // this processes 1, then throws NullPointerException
}
}
을 그래서 당신이 볼 수 있듯이, 두 구조가 실제로 정확하게 해당되지 않습니다. 위의 코드 조각의 본질은 간결하게 여기 제시 : 첫 번째 루프는 잘 갔다 발견 할 것이다
int[] arr;
arr = new int[5];
for (int x : arr) {
arr = null;
}
arr = new int[5];
for (int i = 0; i < arr.length; i++) {
arr = null;
}
, 두 번째 루프는 NullPointerException
를 throw있다. 따라서 대부분의 경우, 두 구성은 정확히 100 % 동등하지 않습니다. players
이 get()
구현이 고장, 또는 어떤 속도로, (java.util.List
의 동작과 다릅니다) 예상치 못한 방식으로 동작 사용자 정의 java.lang.Iterable
경우
선수 유형은 무엇입니까? –
예외가 SVP에 던져지는 곳으로 좀 더 구체적으로 표현해 주실 수 있습니까? – Anzurio
java.lang.NullPointerException이 PokerGame.dealRound (PokerGame.java:105) PokerGame.play에서 \t (PokerGame.java:38) PokerGame.main에서 \t (PokerGame.java:202) 라인에 \t 105는 p.addCard (deck.dealCard())입니다. – dukevin