我正在使用Java 1.3版本,因此它不支持泛型。我想出了一个可疑的解决方法。我想知道整数和双精度对象是否具有不必要的开销;我的意思是:整数占用的空间是否与int相同?同样的问题也适用于Double和doubles。
据我所知,对象数组包含一个32位整数数组,实际上它们存储在内存中的地址与数组无关。但是当我显式地创建一个原始数据类型的数组时,结果可能很糟糕。因为就我所知,原始数据类型的数组实际上是存储数据本身,而不是数据的指针。或者我是从C ++中做出了太多的假设?
因此,如果DataPackage中的数组实际上保存的是指针而不是原始数据类型,那么我可以继续进行。但是,如果它们保存的是原始数据类型本身,则访问数据将成为一个问题,因为double是64位的数据,但指向它的指针仍然是32位的。
为了访问这些数据,我将对象数组转换为整数数组,然后调用intValue()函数: temp是一个int数组。 我必须确保getData返回一个DataPackage。
据我所知,对象数组包含一个32位整数数组,实际上它们存储在内存中的地址与数组无关。但是当我显式地创建一个原始数据类型的数组时,结果可能很糟糕。因为就我所知,原始数据类型的数组实际上是存储数据本身,而不是数据的指针。或者我是从C ++中做出了太多的假设?
因此,如果DataPackage中的数组实际上保存的是指针而不是原始数据类型,那么我可以继续进行。但是,如果它们保存的是原始数据类型本身,则访问数据将成为一个问题,因为double是64位的数据,但指向它的指针仍然是32位的。
/**
*
*
* @todo Comment all the code.
* @author Davidthefat
* @version 1.0
*/
public class DataPackage {
private String dataType;
private Object data;
/**
*
* @param type
* @param numOfItems
*/
public DataPackage(String type, int numOfItems) {
dataType = type;
if (type.equals("Wheels")) {
data = new int[numOfItems * 2];
}
if (type.equals("Arms")) {
data = new int[numOfItems * 1];
}
if (type.equals("Joysticks")) {
data = new double[numOfItems * 2];
}
if (type.equals("Buttons")) {
data = new boolean[numOfItems * 4];
}
}
/**
*
* @param t1
*/
public void update(Object t1) {
data = t1;
}
/**
*
* @return
*/
public Object getData() {
return data;
}
/**
*
* @return
*/
public String toString() {
return "This contains " + dataType;
}
}
为了访问这些数据,我将对象数组转换为整数数组,然后调用intValue()函数: temp是一个int数组。 我必须确保getData返回一个DataPackage。
temp[0] = ((Integer[])input.getData("Wheels").getData())[0].intValue();
我现在无法运行这段代码,因为它是为我学校的FRC机器人设计的,而学校已经放假了。