为什么indexof转换为java中的列表失败?

Use*_*291 3 java arrays casting boolean indexof

假设我有一个布尔数组,我想找到第一个"真正的"条目.由于Java数组没有indexOf方法,我想这样做:

boolean[] bArr = new boolean[]{true, true, true, true, true};
int index = Arrays.asList(bArr).indexOf(true);
Run Code Online (Sandbox Code Playgroud)

现在为什么这会导致索引'为-1(即"没有真正找到").

可编辑:http://ideone.com/DdNoVw

Ale*_* C. 10

因为Arrays.asList(bArr)创造了一个List<boolean[]>不是List<Boolean>.Arrays.asList不会将您的boolean[]数组装入Boolean[]数组(注意区别).

因此,您只有一个在索引0处具有单个布尔数组的List.

如果您使用Boolean[] bArr = new Boolean[]{true, true, true, true, true};,index则值为0.

所以克服这个问题的方法是:

  • 创建一个空List,循环遍历数组并将每个项添加到列表中(每个布尔值将被设置为布尔值)
  • 编写一个简单的实用工具方法,该方法将boolean[]数组作为参数和要查找的值