Java 哪一个更有效?为映射的临时结果声明对象';s的价值观?或者直接从映射根获取?

Java 哪一个更有效?为映射的临时结果声明对象';s的价值观?或者直接从映射根获取?,java,Java,我曾经用过java。但始终有一个问题如下。假设我有一个成绩班 public class Result { private List<Entity1> entity1List; private Map<String, Entity2> entity2Map; private Map<Integer, Entity3> entity3Map; ...... } 公共类结果{ 私有列表实体1列表; 私有地图实体2map;

我曾经用过java。但始终有一个问题如下。假设我有一个成绩班

public class Result {

     private List<Entity1> entity1List;
     private Map<String, Entity2> entity2Map;
     private Map<Integer, Entity3> entity3Map;

     ......
}
公共类结果{
私有列表实体1列表;
私有地图实体2map;
私有地图实体3map;
......
}
现在我有了一个方法来使用这个类的内部结果。哪种方式更有效

方式1:

public void test1 (Result result, List<User> users) {
      Map<String, Entity2> entity2Map = result.getEntity2Map();
      for (User user : users) {
           System.out.println(entity2Map.get(user.getUID()));
      }
} 
public void test1(结果,列出用户){
Map entity2Map=result.getEntity2Map();
for(用户:用户){
System.out.println(entity2Map.get(user.getUID());
}
} 
方式2:

public void test1 (Result result, List<User> users) {
      for (User user : users) {
          System.out.println(result.getEntity2Map().get(user.getUID()));
      }
} 
public void test1(结果,列出用户){
for(用户:用户){
System.out.println(result.getEntity2Map().get(user.getUID());
}
} 

哪种方式更有效?还是它们是一样的?谢谢。

这更多的是关于编译器将做什么的问题,取决于方法
.getEntity2Map()
的作用

如果该方法只是返回一个引用,而不做任何其他操作,那么编译器可能会注意到这一点,并将使路径1变为路径2。您可以通过反编译
文件来检查编译器执行的任何操作。这是一个关于如何进行的问题

一般来说,使用方式1可能更好,因为您显式地创建了一个临时变量。如果反复调用方法
.getEntity2Map()
,而编译器没有对此进行优化,则会为每次调用创建一个新的方法。每次创建堆栈帧都需要时间;如果方法的结果没有任何改变,这就是浪费时间