让我们考虑以下简化示例:
public class Example { public static void main(String[] args) { int[] factors = {1, 2, 3}; ArrayList<Integer> f = new ArrayList(Arrays.asList(factors)); System.out.println(f); }}
在println行中,这会打印类似“ [[I @ 190d11]””的字样,这意味着您实际上已经构建了一个包含int 数组 的ArrayList 。
您的IDE和编译器应警告该代码中未经检查的分配。您应该始终使用
new ArrayList<Integer>()或
newArrayList<>()代替
new ArrayList()。如果您使用过它,则会由于尝试传递
List<int[]>给构造函数而出现编译错误。
从
int[]至没有自动装箱
Integer[],总之,自动装箱只是编译器中的语法糖,因此在这种情况下,您需要手动进行数组复制:
public static int getTheNumber(int[] factors) { List<Integer> f = new ArrayList<Integer>(); for (int factor : factors) { f.add(factor); // after autoboxing the same as: f.add(Integer.valueOf(factor)); } Collections.sort(f); return f.get(0) * f.get(f.size() - 1);}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)