java - Java Integer 和 Double 对象是否有不必要的开销?

标签 java object pointers integer double

我正在使用 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 机器人,而且学校放假了。

最佳答案

很难理解你的问题,但我可以这样说:

  1. 基元数组 intdouble 等正如您所怀疑的那样,只是一个值数组,而不是指向值的指针。
  2. Integer 将比 int 占用更多内存,因为 Integer 是一个对象,因此您将有对象开销,其中int 将只占用所需的数据空间。与 Double 等相同

关于java - Java Integer 和 Double 对象是否有不必要的开销?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8661420/

相关文章:

java - 在java中加密一个十六进制字符串

java - 尽管 RAM 显示 6 GB 可用空间,但 Java 运行时环境的内存不足无法继续

java - 使用 Java Pattern API 对 EdiText 进行过滤条件

java - 我的应用程序正在显示图像网址。如何下载图像以便它可以显示在我的应用程序上

c - 指向结构体引用的指针数组

c - Memcpy 函数在 C 中崩溃

python - 如何通过测试正确设置和拆卸我的 pytest 类?

包含容器的对象的 C++ 布局

C++ 使用多态复制对象

c++ - 将常量指针推送到 std::stack<T *> 会产生编译错误