Java中匿名类和lambda表达式之间的区别?

匿名类是一个没有名称的内部类,这意味着我们可以同时声明和实例化类。 Lambda表达式是编写匿名类的简短形式。 通过使用lambda表达式,我们可以声明不带任何名称的方法。

匿名类vs Lambda表达式

  • 匿名类对象在编译后会生成一个单独的类文件,当lambda表达式转换为私有方法时,该类文件会增加jar文件的大小。它使用invokedynamic 字节指令动态绑定此方法,从而节省了时间和内存。

  • 我们使用this 关键字 表示lambda表达式中的当前类,而对于匿名类,this 关键字 可以表示该特定的匿名类。

  • 匿名类可以用于多个抽象方法,而lambda表达式专门用于函数接口。

  • 我们只需要在lambda表达式中提供函数体,而对于匿名类,则需要编写冗余的类定义。

示例

public class ThreadTest {
   public static void main(String[] args) {
      Runnable r1 = new Runnable() { //匿名类
      @Override
      public void run() {
         System.out.println("使用匿名类");
      }
   };
      Runnable r2 = () -> { // lambda表达式
         System.out.println("使用Lambda表达式");
      };
      new Thread(r1).start();
      new Thread(r2).start();
   }
}

输出结果

使用匿名类
使用Lambda表达式