为什么java.util.Map值可以是基本数组而不是单基元

Sca*_*avs 5 java primitive dictionary value-type wrapper

这是两个例子

将值映射为单值

private Map<Short, Boolean> _Booleans = new HashMap<Short, Boolean>(); //works
private Map<Short, boolean> _Booleans = new HashMap<Short, boolean>(); //not allowed
Run Code Online (Sandbox Code Playgroud)

将值映射为Array

private Map<Short, Boolean[]> _Booleans = new HashMap<Short, Boolean[]>(); //works
private Map<Short, boolean[]> _Booleans = new HashMap<Short, boolean[]>(); //works!
Run Code Online (Sandbox Code Playgroud)

原始包装器被强制为单值,但是允许原始数组,为什么呢?

子问题:是否可以将单值基元与Map一起使用?

Mag*_* Xy 6

地图只能存储Objects.基元不会Objects,除非他们是在一个包装类(Boolean而不是boolean在你的例子).

Objects无论数组包含哪种数据,数组总是如此.因此,它们可以毫无问题地存储在Map中.

在Java中,通常您应该更喜欢使用原始值,因为它们在内存使用方面更快,更小.但是,在某些情况下(如示例中的那种情况),盒装类型更有用.在某些情况下(通常在使用泛型时),自动装箱可能会生效.

基元与其Object对应物之间的重要区别在于它Object可以为空.原语永远不会为空.