Java:原始数据类型的数组不是autobox

Dav*_*lle 29 java generics autoboxing

我有这样的方法:

public static <T> boolean isMemberOf(T item, T[] set)
{
    for (T t : set) {
        if (t.equals(item)) {
            return true;
        }
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

现在我尝试使用charfor 调用此方法T:

char ch = 'a';
char[] chars = new char[] { 'a', 'b', 'c' };
boolean member = isMemberOf(ch, chars);
Run Code Online (Sandbox Code Playgroud)

这不起作用.我期望char,并char[]得到autoboxed至CharacterCharacter[],但是这似乎并没有发生.

任何见解?

Edd*_*die 41

数组没有自动装箱,仅适用于基元.我相信这是你的问题.

  • 而且Java的限制,恕我直言. (7认同)
  • 是的,这就是问题所在.这对我来说似乎是如此......或者至少是反直觉的. (4认同)

Jon*_*eet 14

为什么char[]要装箱Character[]?数组总是引用类型,因此不需要装箱.

此外,它将非常昂贵 - 它将涉及创建一个新的数组,然后轮流装箱每个char.哎呀!

  • 从技术角度来看,我完全同意你的看法.从以用户为中心的角度来看,这似乎应该"正常工作".(我想如果不是首先使用原始类型,这根本就不是问题) (8认同)