Java 函数指针和自动装箱

标签 java function lambda

据我了解 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/

相关文章:

java - 用特定时间JAVA初始化计时器

java - 如何检查值是否是手动设置的,而不是使用 setValue(JSlider、JSpinner)设置的?

java - 获取 HashMap 中具有类似 'some value' 的键的键列表

arrays - 在 TypeScript 中,如何声明接受字符串并返回字符串的函数数组?

python - 根据 pandas 第三列中的条件在两列中的值之间进行选择

java - 如何使用正则表达式分割字符串并插入到ArrayList中?

C 在主函数中显示(打印),而在自定义函数中返回值

c - 我的功能出了什么问题?

node.js - 为什么使用 pg-promise AWS Lambda 执行时间很长

java - lambda 表达式与静态方法