java怎么输出变量的默认值_java – 默认变量的值与初始化默认值

我们都知道,根据

JLS7 p.4.12.5每个实例变量都是用默认值初始化的。例如。 (1):

public class Test {

private Integer a; // == null

private int b; // == 0

private boolean c; // == false

}

但我一直以为,这样的类实现(2):

public class Test {

private Integer a = null;

private int b = 0;

private boolean c = false;

}

绝对等于示例(1)。我预计,这个复杂的Java编译器会看到(2)中的所有这些初始化值都是多余的,省略它们。

但是突然间,对于这两个类,我们有两个不同的字节码。

例如(1):

0: aload_0

1: invokespecial #1; //Method java/lang/Object."":()V

4: return

例如(2):

0: aload_0

1: invokespecial #1; //Method java/lang/Object."":()V

4: aload_0

5: aconst_null

6: putfield #2; //Field a:Ljava/lang/Integer;

9: aload_0

10: iconst_0

11: putfield #3; //Field b:I

14: aload_0

15: iconst_0

16: putfield #4; //Field c:Z

19: return

问题是:为什么?但这是很明显的事情要优化。什么原因?

UPD:我使用Java 7 1.7.0.11 x64,没有特殊的javac选项

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值