为什么System.out.getClass()为每个println引用调用?

时间:2016-01-29 20:38:48

标签: java compilation decompiling

我的来源是这样写的:

final Collection<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("orange");
list.forEach(System.out::println);

经过编译和反编译后,我发现了这个:

ArrayList list = new ArrayList();
list.add("apple");
list.add("banana");
list.add("orange");
PrintStream var10001 = System.out;
System.out.getClass();
list.forEach(var10001::println);

好的,System.out必须初始化,我明白了。但是,我接下来的两行来源是:

final Random r = new Random();
r.ints(7, 14).limit(5).sorted().forEach(System.out::println);

反编译的课程给了我这个:

Random r = new Random();
IntStream var10000 = r.ints(7, 14).limit(5L).sorted();
var10001 = System.out;
System.out.getClass();
var10000.forEach(var10001::println);

这似乎是一种安全矫枉过正。是否有编译器执行第二次getClass()调用的实际原因?

0 个答案:

没有答案