据我了解 Java 函数指针或 lambda,您声明签名如下:
BiFunction<Integer, Integer, Integer> add = (a,b) -> a+b;
为了应用它,我们使用:
add.apply(1,2)
这里涉及自动装箱吗?
如果是,如何避免它(并且仍然有类似于函数指针的东西)?
我知道自动装箱可能是一个性能问题,因为它每次都会创建一个对象(而不是堆栈上的原语)。 如果它隐式发生,可能会令人沮丧,所以我问。
最佳答案
Is auto-boxing involved here?
绝对是的。 1
是一个 int 文字,而不是 Integer。因此,为了传递给需要 Integer 的内容,编译器会在幕后执行必要的操作。
正如评论中指出的:如果你想避免这种情况,你需要使用 IntFunction反而。因为该抽象允许您传递 int
值。
或者,您可以使事情变得明确,例如 ...apply(Integer.valueOf(1), ...
关于Java 函数指针和自动装箱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67127005/