Java 8 Streams int和Integer

时间:2014-02-22 04:15:54

标签: java integer int java-8 java-stream

只是让我的手弄脏了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?任何有关这方面的见解都会非常有用......

1 个答案:

答案 0 :(得分:12)

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

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

使用时

Stream.of(ints)

其中intsint[],Java没有看到多个int元素(基本类型),它看到一个int[]元素(其中是一种参考类型)。因此单个int[]被绑定为T... values表示的数组中的唯一元素。

因此values成为int[][],其每个元素都是int[],其打印方式如

[I@5acf9800