我正在使用 Java 1.3,因此它不支持泛型。我想出了一个阴暗的解决方法。我想知道 Integer 和 Double 对象是否有不必要的开销;我想我要问的是:整数是否占用与 int 相同的空间量? Double 和 doubles 的相同问题。
据我所知,对象数组包含一个 32 位整数数组,该数组实际上在内存中保存对象的地址,与数组无关。但是当我像我在这里做的那样显式地制作一个基元数组时,结果会很糟糕。因为,据我所知,基元数组实际上是数据数组,而不是指向数据的指针。或者我只是从 C++ 中假设了太多?
因此,如果 DataPackage 中的 Array 确实包含指针而不是基元,我就可以开始了。但是,如果他们自己持有原语,那么访问数据将是一个问题,因为 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 是一个整数数组。 我还必须将 getData 放入输入中,只返回一个 DataPackage。
temp[0] = ((Integer[])input.getData("Wheels").getData())[0].intValue();
我现在不能只运行这段代码,因为这是我学校的 FRC 机器人,而且学校放假了。
最佳答案
很难理解你的问题,但我可以这样说:
- 基元数组
int
、double
等正如您所怀疑的那样,只是一个值数组,而不是指向值的指针。 Integer
将比int
占用更多内存,因为Integer
是一个对象,因此您将有对象开销,其中int
将只占用所需的数据空间。与Double
等相同
关于java - Java Integer 和 Double 对象是否有不必要的开销?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8661420/