1 回答

TA貢獻1725條經驗 獲得超8個贊
是和不是。
從技術上講,您不能為每個數組維度定義不同的靜態類型。因此,您不能將int
列與double
列混合。即使對于對象,您也不能將Integer
列與Double
列混合。
如果您只需要原語,您可以使用double[][]
double 可以表示所有 32 位整數(請參閱Representing integers in doubles)。但從技術上講,該數組是全雙精度數:沒有什么可以阻止您存儲3.14
第一列中的值。
對于對象,您可以使用通用的基本類型(如果存在)。對于您的特定用例,所有數字類型都擴展,java.lang.Number
因此這有效:
@Test
public void testMixedNumbersArray() {
Number[][] array = new Number[3][2];
array[0][0] = 123; array[0][1] = 12.34;
array[1][0] = 234; array[1][1] = 23.34;
array[2][0] = 345; array[2][1] = 45.67;
for (Number[] x : array) {
System.out.println(Arrays.toString(x));
}
}
// outputs:
// [123, 12.34]
// [234, 23.34]
// [345, 45.67]
請記住,這實際上還允許您在此數組中混合 Float、Short、...甚至 BigDecimal 值,以及允許null值。
因此,如果您需要對數據類型進行嚴格控制,一個選項是創建一個自定義類,該類封裝兩個適當類型的單獨數組:
public class MyArray {
int[] col1;
double[] col2;
public MyArray(int size) {
col1 = new int[size];
col2 = new double[size];
}
// ... add get/set methods as needed, e.g.
public void setCol1(int pos, int value) {
col1[pos] = value;
}
public void setCol2(int pos, double value) {
col2[pos] = value;
}
}
要記住的最后一件事是 Java 多維數組是“數組的數組”(請參閱 Java 中的多維數組)。這就是為什么只有一種類型:最內層數組的類型。所有其他維度只是通往目標數組實例的間接級別(數組的數組)。
添加回答
舉報