如果方法参数是原始整数,那么方法内循环中的myArrayList.contains(primitiveArg)效率极低还是可以?

时间:2018-11-11 19:33:46

标签: java performance autoboxing

我有这样的代码:

public int getDistanceToNumber(int number) {
    List<Integer> tuple5 = null;
    int distanceCounter = 0;
    for (int i = 0; i < allDraws.size(); i++) {
        tuple5 = allDraws.get(i).getTupleAsList();
        if (tuple5.contains(number)) {  // autoboxing primitive ?

        }

    }

    return 0;
}

问题是-我是否应该使方法参数Integer像int getDistanceToNumber(Integer number)一样从原语自动装箱到Integer仅发生一次,否则没有性能问题。

这段代码在循环中运行超过10万次...

1 个答案:

答案 0 :(得分:0)

您应该在JMH下进行测试。

  • 通过一次使用Integer.valueOf(int)并将其传递给List::contains(Object),可以避免装箱问题。
  • 编译器可能有足够的效率来了解number永远不会改变,并为您做到这一点。

在其他情况下,如果没有更多信息(allDraws的类型?),在装箱转换之前可能还需要进行其他优化。