转换 java 原语,JVM 是否试图节省内存?
Casting java primitives, does the JVM try to save memory?
var foo = (short) 40 + (byte) 10
foo占用多少字节?
它的类型是什么?
我希望结果存储在 short 中,但为了节省内存,JVM 会测试它是否适合较小的原语吗?
如果是(short) 1 + (byte) 1
还会是短片吗?
经验法则:整数算术运算按long
完成,结果为long
,如果参数为 long
,否则为 int
。
我还怀疑 JVM 甚至使用 4 个字节来存储 byte
和 short
(以及 boolean
)变量 - 请参阅 JVMS 2.6.1. Local Variables and Table 2.11.1-B.
甚至
var test = (byte)1 + (byte)1
将导致 test
成为 int
.
var test = (byte)(1 + 1)
并非如此
var foo = (short) 40 + (byte) 10
foo占用多少字节? 它的类型是什么?
我希望结果存储在 short 中,但为了节省内存,JVM 会测试它是否适合较小的原语吗?
如果是(short) 1 + (byte) 1
还会是短片吗?
经验法则:整数算术运算按long
完成,结果为long
,如果参数为 long
,否则为 int
。
我还怀疑 JVM 甚至使用 4 个字节来存储 byte
和 short
(以及 boolean
)变量 - 请参阅 JVMS 2.6.1. Local Variables and Table 2.11.1-B.
甚至
var test = (byte)1 + (byte)1
将导致 test
成为 int
.
var test = (byte)(1 + 1)