जावा भाषा विशिष्टता को परिभाषित करता है 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 में पेश किए गए इस हैक को हटाया नहीं जा सका।