java数组赋值问题

cha*_*ged 1 java arrays

在使用方法Arrays.deepToString(Object [] a)时,我遇到了这个问题,我可以用这种方式放下.

 Object [] not_allowed = new  int[]{7, 9, 8};
 Object [] allowed  = new int[][]{{1, 2, 3}, {6, 5, 4}};
Run Code Online (Sandbox Code Playgroud)

为什么我不允许在单维情况下将int []赋值给Object []但我可以在多维情况下执行此操作.

Cha*_*tni 7

类似的原始类型int不是对象,而数组是对象 - 您可以将任何数组分配给Object引用

Object o = new  int[]{7, 9, 8};
Run Code Online (Sandbox Code Playgroud)

new int[][]是一个对象数组,因此可以分配给Object[].您可能想要编写这样的实用程序方法来执行您想要的操作:

public static String arrayToString(Object o) {
    if(o instanceof Object[])  {
        return Arrays.deepToString((Object[]) o);
    }
    else if(o instanceof long[]) {
        return Arrays.toString((long[]) o);
    }
    else if(o instanceof int[]) {
        return Arrays.toString((int[]) o);
    }
    else if(o instanceof short[]) {
        return Arrays.toString((short[]) o);
    }
    else if(o instanceof byte[]) {
        return Arrays.toString((byte[]) o);
    }
    else if(o instanceof float[]) {
        return Arrays.toString((float[]) o);
    }
    else if(o instanceof double[]) {
        return Arrays.toString((double[]) o);
    }
    else if(o instanceof boolean[]) {
        return Arrays.toString((boolean[]) o);
    }
    throw new IllegalArgumentException("input is not an array");
}
Run Code Online (Sandbox Code Playgroud)

例:

Object intArray = new  int[]{7, 9, 8};
Object[] intintArray  = new int[][]{{1, 2, 3}, {6, 5, 4}};
Object[] intintintArray  = new int[][][]{{{1, 2, 3}, {6, 5, 4}},
               {{1, 2, 3}, {6, 5, 4}}};
System.out.println(arrayToString(intArray));
System.out.println(arrayToString(intintArray));
System.out.println(arrayToString(intintintArray));
Run Code Online (Sandbox Code Playgroud)

输出:

[7, 9, 8]
[[1, 2, 3], [6, 5, 4]]
[[[1, 2, 3], [6, 5, 4]], [[1, 2, 3], [6, 5, 4]]]
Run Code Online (Sandbox Code Playgroud)


Car*_*icz 5

ints不是Objects,这就是为什么第一个赋值是非法的:ints的数组不是s的数组Object.

但无论如何,数组都是对象.您已成功将外部数据结构(数组数组)分配给Objects 数组.


Mat*_*mes 5

小写int是基元,不从Object继承.请尝试使用Integer.