我正在尝试决定如何设计我的应用。
我有大约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];
答案 0 :(得分:5)
从技术上讲,在Java语言中,short
是2个字节。但是,在JVM内部,short
是存储类型,而不是像int
,float
或double
这样的完整原始数据类型。 。 JVM寄存器一次总是保持4个字节;没有半字或字节寄存器。 JVM是否实际上将short
存储在对象内的两个字节中,或者它是否始终存储为4个字节,实际上取决于实现。
这一切都适用于“真正的”JVM。 Dalvik的做法有所不同吗?说不上。
答案 1 :(得分:1)
根据Java Virtual Machine Specification, Sec. 2.4.1,short
总是恰好两个字节。
Java Native Interface允许从本机代码直接访问存储在VM中的基元数组。类似的事情可能发生在Android's JNI。这几乎可以保证Java short[]
在JVM兼容环境或Dalvik虚拟机中都是2字节值的数组。