Java Tuple2使用accessor方法和直接调用变量之间的区别

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

Tuple2 tuple = new Tuple2("Hello", "World"); //getting values directly String direct = tuple._1; //using getter String indirect = tuple._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编译器很乐意内联该方法,并且在性能方面并不重要。