Java 8 Streams int和Integer

g0c*_*33k 5 java int integer 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]");
}
Run Code Online (Sandbox Code Playgroud)

输出是:

[Start]
Int : [I@5acf9800
Integer : 1
Integer : 2
Integer : 3
Integer : 4
[End]
Run Code Online (Sandbox Code Playgroud)

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

Sot*_*lis 12

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

static <T> Stream<T> of(T... values)
Run Code Online (Sandbox Code Playgroud)

当你使用

Stream.of(ints)
Run Code Online (Sandbox Code Playgroud)

其中intsint[],Java没有看到一些int元素(原始类型),它看到的单个int[]元件(这是一个引用类型).所以单个int[]被绑定为数组所代表的唯一元素T... values.

因此values成为一个int[][]和它的每个元素是一个int[],打印像

[I@5acf9800
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用`IntStream.of`进行整数. (6认同)