gpt4 book ai didi

Java 8 Streams int 和 Integer

转载 作者:搜寻专家 更新时间:2023-10-31 08:22:55 24 4
gpt4 key购买 nike

我刚刚开始接触 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?对此的任何见解都会非常有帮助......

最佳答案

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

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

当你使用

Stream.of(ints)

其中 ints 是一个 int[],Java 看不到多个 int 元素(原始类型),它看到一个单个 int[] 元素(这是一个引用类型)。因此,单个 int[] 被绑定(bind)为 T...values 表示的数组中的唯一元素。

因此 values 变成了一个 int[][] 并且它的每个元素都是一个 int[],它的打印形式如下

[I@5acf9800

关于Java 8 Streams int 和 Integer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21949570/

24 4 0