【问题标题】:Bytecode - public and private attributes differences字节码 - 公共和私有属性差异
【发布时间】:2012-02-23 16:46:40
【问题描述】:

在 Java 中,公共属性和使用简单 getter/setter 的私有属性的字节码有什么区别?

【问题讨论】:

    标签: java private bytecode public


    【解决方案1】:

    使用公共字段,您有:

    aload_0
    iconst_1
    putfield        #1; //Field public
    return
    

    使用私有 + 设置/获取:

    aload_0
    iconst_1
    putfield        #1; //Field private
    return
    
    public int getA();
      Code:
       0:   aload_0
       1:   getfield        #1; //Field private
       4:   ireturn
    
    public void setA(int);
      Code:
       0:   aload_0
       1:   iload_1
       2:   putfield        #1; //Field private
       5:   return
    

    所以从性能的角度来看,private + set/get 只会带来不必要的开销。但它具有架构优势,应该被 JavaBeans 等一些约定使用。

    【讨论】:

    • 您使用什么工具查看说明?
    • javap -c
    • JIT 很可能会内联使用 setter/getter。
    • 没错,但你永远无法确定,因为有许多 JVM 供应商和许多运行 java 类的模式。
    • 请不要公开非最终字段。有效的 Java 项目 14 解释了原因。 (另外,如果你公开非最终字段,我会哭泣。)
    猜你喜欢
    • 1970-01-01
    • 2017-12-09
    • 2018-05-09
    • 1970-01-01
    • 2017-06-27
    • 2010-11-30
    • 2015-06-09
    • 1970-01-01
    • 2010-09-30
    相关资源
    最近更新 更多