Java中匿名类和lambda表达式的区别?
匿名类是一个没有名称的内部类,这意味着我们可以同时声明和实例化类。lambda表达式是编写匿名类的简短形式。通过使用lambda表达式,我们可以声明没有任何名称的方法。
匿名类 vs Lambda表达式
- 匿名类对象在编译后会生成一个单独的类文件,从而增加jar文件的大小,而lambda表达式会被转换成一个私有方法。它使用invokedynamic字节码指令动态绑定此方法,从而节省时间和内存。
- 我们在lambda表达式中使用this关键字来表示当前类,而在匿名类的情况下,this关键字可以表示特定的匿名类。
- 匿名类可以用于多个抽象方法的情况,而lambda表达式专门用于函数式接口。
- 我们只需要在lambda表达式中提供函数体,而在匿名类的情况下,我们需要编写冗余的类定义。
示例
public class ThreadTest {
public static void main(String[] args) {
Runnable r1 = new Runnable() { // Anonymous class
@Override
public void run() {
System.out.println("Using Anonymous class");
}
};
Runnable r2 = () -> { // lambda expression
System.out.println("Using Lambda Expression");
};
new Thread(r1).start();
new Thread(r2).start();
}
}输出
Using Anonymous class Using Lambda Expression
广告
数据结构
网络
关系数据库管理系统(RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP