[英]Why calling this function recursively does not throw a NullPointerException
我的问题来自这个话题 。
考虑以下代码:
public class Test {
static Function<Integer, Integer> fibLambda = null;
public static void main (String[] args) {
fibLambda = n -> n <= 2 ? 1 : fibLambda.apply(n - 1) + fibLambda.apply(n - 2);
System.out.println(fibLambda.apply(6));
}
}
上面的输出是8。
我不知道如何初始化fibLamdba
? 似乎我完全想念方法调用是如何完成的,因为我虽然这段代码会产生NPE。
希望我的问题清楚
您的代码等同于
static Function<Integer, Integer> fibLambda = null;
public static void main(String[] args) {
fibLambda = n -> n <= 2 ? 1 : Example.fibLambda.apply(n - 1) + Example.fibLambda.apply(n - 2);
System.out.println(fibLambda.apply(6));
}
到名为fibLambda
的apply
fibLambda
被分配一个值时。 基本上,lambda表达式不会捕获fibLambda
的值,它只是注册该变量需要在适当的时候进行求值才能产生一个值。
请记住,lambda表达式不会执行其主体中出现的代码。 这只是一个声明,类似于声明匿名类实例的方式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.