जावा भाषा विशिष्टता को परिभाषित करता है E1 op= E2के बराबर होने का E1 = (T) ((E1) op (E2))जहां Tका एक प्रकार है E1और E1एक बार मूल्यांकन किया जाता है ।
यह एक तकनीकी जवाब है, लेकिन आप सोच रहे होंगे कि ऐसा क्यों है। ठीक है, चलो निम्नलिखित कार्यक्रम पर विचार करें।
public class PlusEquals {
public static void main(String[] args) {
byte a = 1;
byte b = 2;
a = a + b;
System.out.println(a);
}
}
यह प्रोग्राम क्या छापता है?
क्या आपने 3 अनुमान लगाया? बहुत बुरा, यह कार्यक्रम संकलित नहीं करेगा। क्यों? खैर, ऐसा होता है कि जावा में बाइट्स के अलावा वापसी को परिभाषित किया गया हैint । यह, मेरा मानना है कि जावा वर्चुअल मशीन बाइटकोड को बचाने के लिए बाइट संचालन को परिभाषित नहीं करता है (सभी के बाद सीमित संख्या में है), पूर्णांक संचालन का उपयोग करने के बजाय एक भाषा में लागू किया गया कार्यान्वयन विवरण है।
लेकिन अगर a = a + bयह काम नहीं करता है, तो इसका मतलब यह होगा कि a += bबाइट्स के लिए काम नहीं करेगा यदि इसे E1 += E2परिभाषित किया गया था E1 = E1 + E2। जैसा कि पिछले उदाहरण से पता चलता है, वास्तव में ऐसा ही होगा। +=बाइट और शॉर्ट्स के लिए ऑपरेटर का काम करने के लिए एक हैक के रूप में , एक निहित कास्ट शामिल है। यह हैक के लिए बहुत अच्छा नहीं है, लेकिन जावा 1.0 के काम के दौरान, भाषा को शुरू करने के लिए जारी करने पर ध्यान केंद्रित किया गया था। अब, पीछे की संगतता के कारण, जावा 1.0 में पेश किए गए इस हैक को हटाया नहीं जा सका।