Android:短片真的需要2个字节吗?

时间:2012-01-13 19:00:09

标签: android short

我正在尝试决定如何设计我的应用。

我有大约300个类的实例:

public class ParamValue {

   protected String sValue = null;
   protected short  shValue = 0;
   protected short  mode = PARAM_VALUE_MODE_UNKNOWN;

   /*
    * ...
    */
}

我有一组这些实例。我不知道这些短路真的需要2个字节,还是4个字节呢?

我需要通过AIDL将这些对象的列表作为List<Parcelable>传递。包裹不能readShort()writeShort(),它只能与int一起使用。因此,在这里使用short我也必须手动将两个短裤装入一个int,包裹它,然后打开包装。看起来太突兀了。

你能否告诉我短片需要多少字节,在这里使用short而不是int是否有意义?

更新:

我为未来的读者更新了我的问题。

所以,我写了一个测试应用程序,我发现在我的情况下,绝对没有理由使用short,因为它占用的空间与int相同。但是,如果我像这样定义短裤阵列:

 protected short[] myValues[2];

然后它比int数组占用更少的空间:

 protected int[] myValues[2];

2 个答案:

答案 0 :(得分:5)

从技术上讲,在Java语言中,short是2个字节。但是,在JVM内部,short存储类型,而不是像intfloatdouble这样的完整原始数据类型。 。 JVM寄存器一次总是保持4个字节;没有半字或字节寄存器。 JVM是否实际上将short存储在对象内的两个字节中,或者它是否始终存储为4个字节,实际上取决于实现。

这一切都适用于“真正的”JVM。 Dalvik的做法有所不同吗?说不上。

答案 1 :(得分:1)

根据Java Virtual Machine Specification, Sec. 2.4.1short总是恰好两个字节。

Java Native Interface允许从本机代码直接访问存储在VM中的基元数组。类似的事情可能发生在Android's JNI。这几乎可以保证Java short[]在JVM兼容环境或Dalvik虚拟机中都是2字节值的数组。