【问题标题】:Java Tuple2 difference between using accessor method and calling the variable directlyJava Tuple2 使用访问器方法和直接调用变量的区别
【发布时间】:2016-08-02 19:37:29
【问题描述】:

我在我的 Java 代码中使用 Tuple2,我想知道通过 getter 访问值或直接获取变量之间是否有区别。

Tuple2<String,String> tuple = new Tuple2<>("Hello", "World");
//getting values directly
String direct = tuple._1;
//using getter
String indirect = tuple._1();

【问题讨论】:

    标签: java scala tuples


    【解决方案1】:

    第一个加载一个字段,第二个使用getFieldinvokeVirtual 操作码相对调用方法。生成的字节码看起来像

      13: getfield      #6                  // Field scala/Tuple2._1:Ljava/lang/Object;
      16: checkcast     #7                  // class java/lang/String
      19: astore_2
      20: aload_1
      21: invokevirtual #8                  // Method scala/Tuple2._1:()Ljava/lang/Object;
      24: checkcast     #7                  // class java/lang/String
    

    区别在于字段读取和方法调用之间的区别,即JIT 编译器很乐意内联该方法,这对性能没有太大影响。

    【讨论】:

      猜你喜欢
      • 2011-09-10
      • 2011-06-06
      • 1970-01-01
      • 2023-03-31
      • 2013-07-17
      • 1970-01-01
      • 1970-01-01
      • 2017-07-12
      • 2022-11-17
      相关资源
      最近更新 更多