如何获取 UnaryOperator 的 identity 实例
unaryoperator.identity() 返回一个始终返回其输入参数的函数式接口实现。在 java 8 中,可以直接调用静态方法 unaryoperator.identity() 获取该实例。这个实例等价于 lambda 表达式 x -> x,常用于流处理或函数组合中作为恒等变换。

import java.util.function.UnaryOperator;
public class IdentityExample {
public static void main(String[] args) {
UnaryOperator<string> identity = UnaryOperator.identity();
String input = "Hello";
String output = identity.apply(input);
System.out.println("Input: " + input);
System.out.println("Output: " + output);
System.out.println("Same instance? " + (input == output));
}
}</string>
运行上述代码将输出:
Input: Hello
Output: Hello
Same instance? true(对于字符串常量池中的字符串)
identity 与自定义 Lambda 的区别
虽然 UnaryOperator.identity() 和 x -> x 行为一致,但前者是单例模式,每次调用返回同一个对象引用。这在性能敏感场景或需要比较实例身份时可能有意义。例如,在缓存键或函数组合链中,使用 identity 可以避免创建多个相同的 lambda 实例。

import java.util.function.UnaryOperator;
public class IdentityVsLambda {
public static void main(String[] args) {
UnaryOperator<integer> identityMethod = UnaryOperator.identity();
UnaryOperator<integer> lambda = x -> x;
System.out.println("Same reference? " + (identityMethod == lambda));
System.out.println("Apply(5) via method: " + identityMethod.apply(5));
System.out.println("Apply(5) via lambda: " + lambda.apply(5));
}
}</integer></integer>
运行结果:
Same reference? false
Apply(5) via method: 5
Apply(5) via lambda: 5
基于输入 null 时的行为验证
当传入 null 时,UnaryOperator.identity() 会直接返回 null,不会抛出异常。这与大多数其他函数式接口不同,后者可能在某些实现中对 null 值有特殊处理。因此,在使用 identity 时,如果下游逻辑不能接受 null,仍需显式检查。
import java.util.function.UnaryOperator;
public class NullHandling {
public static void main(String[] args) {
UnaryOperator<string> identity = UnaryOperator.identity();
String result = identity.apply(null);
System.out.println("Result is null: " + (result == null));
}
}</string>
运行结果:
Result is null: true
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











