6

刚刚用 Java 8 弄脏了我的手,偶然发现了如下行为 -

public static void main(String... args){
    System.out.println("[Start]");
    int[] ints = {1, 2, 3, 4};
    Stream.of(ints).forEach(i->System.out.println("Int : "+i));


    Integer[] integerNums = {1, 2, 3, 4};
    Stream.of(integerNums).forEach(i->System.out.println("Integer : "+i));

    System.out.println("[End]");
}

输出是:

[Start]
Int : [I@5acf9800
Integer : 1
Integer : 2
Integer : 3
Integer : 4
[End]

而我期望代码在这两种情况下都打印所有 int 和 Integer?对此的任何见解都会非常有帮助......

4

1 回答 1

15

泛型不适用于原始类型。该Stream.of方法声明为

static <T> Stream<T> of(T... values)

当你使用

Stream.of(ints)

在哪里intsint[]Java 看不到许多int元素(原始类型),它看到单个int[]元素(这是一个引用类型)。所以 singleint[]被绑定为由 表示的数组中的唯一元素T... values

所以values变成了int[][]一个,它的每个元素都是一个int[],打印起来像

[I@5acf9800
于 2014-02-22T04:18:49.657 回答