高分悬赏:Java语言函数和lambd表达式中都可以定义变量,这两个变量的作用有什么区别呢,怎么选择

高分悬赏:Java语言函数和lambd表达式中都可以定义变量,这两个变量的作用有什么区别呢,怎么选择

举个例子说明下:第一个是lambda,第二个是正常函数实现接口

    interface A { //接口A
        int methodA();
    }

    public void test() { // 下面的两个方式都是实现接口A
        A a2 = () -> {
            int returnVal = 1;   // lambda中定义的变量
            return returnVal;
        };

        A a1 = new A() {
            @Override
            public int methodA() {
                int returnVal = 1;   // 函数方法中定义的变量
                return returnVal;   
            }
        };

    }

我们可以看到这里lambda其实就是一个接口实现的简写,
所以lambda中定义的变量相当于是:你自己实现了一个接口的时候在这个方法里面定义了一个变量,不懂可以追问(望采纳)
为了演示lambda没有简写(可以这样写 A a2 = () -> 1;)

lambda表达式不能复用,函数是可以复用的,里面定义的变量都不可以拿出来使用
函数之间传递信息,或将lambda中的信息拿出来,可以传引用进去,然后拿出来,如List、Array等都可以