具有多个语句且没有大括号的Lambda表达式的行为

apo*_*ion 0 java lambda

public class A  {
    interface Interface{
        void print();
    }
    public static void main(String[] args) {
        Interface i=()->{System.out.println("1");System.out.println("2");System.out.println("3");System.out.println("4");};
        i.print();
    }
}
output:
1
2
3
4
Run Code Online (Sandbox Code Playgroud)

当我删除像这样的花括号:

public class A  {
    interface Interface{
        void print();
    }
    public static void main(String[] args) {
        Interface i=()->System.out.println("1");System.out.println("2");System.out.println("3");System.out.println("4");
        i.print();
    }
}
output:
2
3
4
1
Run Code Online (Sandbox Code Playgroud)

我知道当我们想要实现多于1个语句时,我们必须使用大括号.当我们删除大括号时,应用程序仍在编译,但我的问题是为什么第二个语句首先执行而第一个语句为最后一个?我找不到任何解释.

Sil*_*olo 5

Interface i=()->System.out.println("1");System.out.println("2");System.out.println("3");System.out.println("4");
i.print();
Run Code Online (Sandbox Code Playgroud)

大多数表达式都不是lambda的一部分.Java不会将换行视为重要行,因此这相当于

Interface i=()->System.out.println("1");
System.out.println("2");
System.out.println("3");
System.out.println("4");
i.print();
Run Code Online (Sandbox Code Playgroud)

现在它更清楚它正在做什么.