यह समतुल्य है लेकिन समान नहीं है। सीधे शब्दों में, यदि एक लंबोदर अभिव्यक्ति मूल्यों पर कब्जा नहीं करता है, तो यह एक सिंगलटन होगा जो हर आह्वान पर फिर से उपयोग किया जाता है।
व्यवहार बिल्कुल निर्दिष्ट नहीं है। जेवीएम को इसे लागू करने के तरीके पर बड़ी स्वतंत्रता दी जाती है। वर्तमान में, ओरेकल की JVM लैम्ब्डा अभिव्यक्ति के प्रति (कम से कम) एक उदाहरण बनाता है (यानी अलग-अलग समान भावों के बीच उदाहरण साझा नहीं करता है), लेकिन उन सभी भावों के लिए एकल बनाता है जो मानों पर कब्जा नहीं करते हैं।
अधिक विवरण के लिए आप इस उत्तर को पढ़ सकते हैं । वहां, मैंने न केवल अधिक विस्तृत विवरण दिया, बल्कि वर्तमान व्यवहार का निरीक्षण करने के लिए कोड का परीक्षण भी किया।
यह Java® लैंग्वेज स्पेसिफिकेशन, चैप्टर “ 15.27.4 द्वारा कवर किया गया है । लंबोदर एक्सप्रेस का रन-टाइम मूल्यांकन ”
संक्षेप:
ये नियम जावा प्रोग्रामिंग भाषा के कार्यान्वयन में लचीलापन प्रदान करने के लिए हैं, इसमें:
हर मूल्यांकन पर एक नई वस्तु आवंटित नहीं की जानी चाहिए।
विभिन्न लैम्ब्डा अभिव्यक्तियों द्वारा निर्मित वस्तुओं को विभिन्न वर्गों (यदि शरीर समान हैं, उदाहरण के लिए) की आवश्यकता नहीं है।
मूल्यांकन द्वारा उत्पादित प्रत्येक वस्तु एक ही वर्ग से संबंधित नहीं है (कैप्चर किए गए स्थानीय चर इनलेट किए जा सकते हैं, उदाहरण के लिए)।
यदि एक "मौजूदा उदाहरण" उपलब्ध है, तो इसे पिछले लैम्ब्डा मूल्यांकन में नहीं बनाया गया है (इसे उदाहरण के लिए, संलग्नक वर्ग के प्रारंभ के दौरान आवंटित किया गया हो सकता है)।