我试图理解IntStream
和Stream<Integer>
之间的区别。我将通过下面的示例进行说明:
int[] someInts = {1, 2, 3, 4, 5};
var intStream = Arrays.stream(someInts);
var streamInteger = Arrays.stream(someInts).boxed();
两者有什么区别?这种区别与性能有什么关系?
我试图理解IntStream
和Stream<Integer>
之间的区别。我将通过下面的示例进行说明:
int[] someInts = {1, 2, 3, 4, 5};
var intStream = Arrays.stream(someInts);
var streamInteger = Arrays.stream(someInts).boxed();
两者有什么区别?这种区别与性能有什么关系?
IntStream
是一个基元类型为 int
的流。
Stream<Integer>
是一个包含 Integer
对象的流。range(...)
和 sum()
是内置于 IntStream
中的概念,虽然使用 reduce()
也可以在 Stream<Integer>
中实现 sum()
,但它没有内置。Integer
的开销相当大。一个 int
的值为 4 字节,而一个 Integer
的引用为 4 字节加上 16 字节的对象,因此,Integer
每个值使用 20 字节,即内存的 5 倍。toArray()
,这一点尤其重要,因为在空间方面,int[]
和 Integer[]
之间有很大的差异。Stream<Integer>
操作的是装箱值(即 Integer
而非原始类型 int),这需要更多的内存,并通常涉及大量的装箱/拆箱操作(根据您的代码而定),而 IntStream
则适用于原始类型。