我的来源是这样写的:
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()调用的实际原因?