Java中方法引用與Lambda區別 - foojay
lambda和方法引用之間有一個關鍵的區別:Lambda 是惰性的,它們只會在呼叫方法時呼叫類建構函式。另一方面,對於方法引用,建構函式只會在分配了方法引用的地方被立即呼叫,而不是在方法呼叫時呼叫。
public class MethodReferenceVSLambdaChallenge { public static void main(String... doYourBest) { Runnable universeImpactRunnable = () -> new ChuckNorris().roundHouseKick(); Runnable galaxyImpactRunnable = new ChuckNorris()::roundHouseKick; System.out.print("The galaxy is finished = "); universeImpactRunnable.run(); universeImpactRunnable.run(); galaxyImpactRunnable.run(); galaxyImpactRunnable.run(); } static class ChuckNorris { private static int numberOfKicks; private int galaxyDamage; ChuckNorris() { this.galaxyDamage = numberOfKicks++; } void roundHouseKick() { System.out.print(this.galaxyDamage); } } } |
結果:
A) The galaxy is finished = 1234
B) The galaxy is finished = 0123
C) The galaxy is finished = 0100
D) The galaxy is finished = 1200
在下面這行並沒有呼叫建構函式:
Runnable universeImpactRunnable = () -> new ChuckNorris().roundHouseKick(); |
而是在下行呼叫了建構函式:
Runnable galaxyImpactRunnable = new ChuckNorris()::roundHouseKick; |
再看看:
universeImpactRunnable.run(); universeImpactRunnable.run(); |
當我們呼叫這些方法時:值將為 0,因為請記住,建構函式只會被呼叫一個,並且在方法引用宣告的那一刻它已經被呼叫了。
相關文章
- Java 9 中的ofNullable方法 | foojayJavaNull
- Java-基礎語法20:Lambda&方法引用Java
- Java 中的方法引用Java
- Java引用型別與WeakHashMapJava型別HashMap
- 物件與物件引用的區別物件
- 值型別與引用型別的區別型別
- java8的新特性之lambda表示式和方法引用Java
- Java中(==)與equals的區別Java
- Java中replace與replaceAll區別Java
- Java中 equals() 方法和 == 的區別Java
- Java中的基本資料型別與引用資料型別Java資料型別
- Java中的引用與ThreadLocalJavathread
- lambda方法引用獲取欄位屬性
- springdatajpa 中get××方法與find××方法的區別Spring
- jquery中append()方法與after()方法的區別jQueryAPP
- ScheduledExecutorService中scheduleAtFixedRate方法與scheduleWithFixedDelay方法的區別
- Java中的方法引用詳解Java
- Java基礎-- ==號與equals()方法的區別Java
- golang中 值型別,指標,引用的區別Golang型別指標
- Java JIT與AOT效能比較 - foojayJava
- Java 中的強引用、軟引用、弱引用和虛引用分別是什麼?Java
- java 10的區域性變數型別推斷Var的用法 - foojayJava變數型別
- Java中抽象類與介面的區別Java抽象
- Java中類與物件的關係與區別Java物件
- 關於java的引用和c++的區別JavaC++
- 強引用、軟引用、弱引用、幻象引用有什麼區別?
- Map集合中value()方法與keySet、entrySet區別
- Java中Stream的teeing()方法用於處理合並兩個Collector - foojayJava
- java中的引用與c中的指標Java指標
- Java中的引用型別和使用場景Java型別
- wait()方法與await()方法的區別AI
- Java筆記:方法引用Java筆記
- Java8——方法引用Java
- Java中Statement與PreparedStatement與CallableStatement之間的區別 - javarevisitedJava
- JAVA中基本資料型別和引用資料型別Java資料型別
- js基本型別和引用型別區別JS型別
- Java引用型別原理剖析Java型別
- java中==和equlas區別Java