我的java类
private static final String constantString = "Constant";
private static final Integer constantInteger = 5;
public static void main(String[] args) {
String s2 = constantString + "append"; // LINENUMBER 9
Integer i2 = constantInteger + 7; // LINENUMBER 10
}
字节码
LINENUMBER 9 L0
LDC "Constantappend"
ASTORE 1
L1
LINENUMBER 10 L1
GETSTATIC TestClass.constantInteger : Ljava/lang/Integer;
INVOKEVIRTUAL java/lang/Integer.intValue()I
BIPUSH 7
IADD
问题 1:为什么编译器没有用 5 替换最终的 Integer (constantInteger) 值,但对于 String 却做到了!
如果删除整数变量的最终关键字
爪哇代码:
private static Integer constantInteger = 5;
字节码:
LINENUMBER 10 L1
GETSTATIC TestClass.constantInteger : Ljava/lang/Integer;
INVOKEVIRTUAL java/lang/Integer.intValue()I
BIPUSH 7
字节码在两种不同的情况下是相同的(静态最终整数,静态整数)
问题2:那么将Integer设为final有什么用?