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 基本型別與 引用型別區別Java型別
- Java 9 中的ofNullable方法 | foojayJavaNull
- Java-基礎語法20:Lambda&方法引用Java
- 引用與指標的區別指標
- Java 中的方法引用Java
- Java引用型別與WeakHashMapJava型別HashMap
- Java執行緒中yield與join方法的區別Java執行緒
- 物件與物件引用的區別物件
- 值型別與引用型別的區別型別
- Java中replace與replaceAll區別Java
- Java中(==)與equals的區別Java
- java8的新特性之lambda表示式和方法引用Java
- Java中 equals() 方法和 == 的區別Java
- ruby中proc和lambda的return區別
- Java中的基本資料型別與引用資料型別Java資料型別
- ScheduledExecutorService中scheduleAtFixedRate方法與scheduleWithFixedDelay方法的區別
- Java中的方法引用詳解Java
- Java JIT與AOT效能比較 - foojayJava
- lambda方法引用獲取欄位屬性
- C++指標與引用的區別C++指標
- golang中 值型別,指標,引用的區別Golang型別指標
- java 10的區域性變數型別推斷Var的用法 - foojayJava變數型別
- Java中的四種引用型別Java型別
- jquery中append()方法與after()方法的區別jQueryAPP
- springdatajpa 中get××方法與find××方法的區別Spring
- Java中的引用與ThreadLocalJavathread
- 引用的例子 C C++ 中區別C++
- Java中抽象類與介面的區別Java抽象
- java中Map,List與Set的區別Java
- Java中Array與ArrayList的主要區別Java
- Java基礎-- ==號與equals()方法的區別Java
- Java中類與物件的關係與區別Java物件
- java 方法修改主函式裡基本資料型別和引用資料型別的區別Java函式資料型別
- Python引用型別和值型別的區別與使用Python型別
- 淺談java中extends與implements的區別Java
- java中過載與重寫的區別Java
- Java中Vector與ArrayList的區別詳解Java
- 關於java的引用和c++的區別JavaC++