1024 * 1024 * 1024 * 1024
और 2147483648
जावा में समान मूल्य नहीं है।
दरअसल, जावा में 2147483648
ISN'T EVEN A VALUE (हालाँकि 2147483648L
है)। संकलक का शाब्दिक अर्थ नहीं है कि यह क्या है, या इसका उपयोग कैसे करना है। तो यह कराहती है।
1024
जावा में एक वैध इंट है, और एक मान्य int
द्वारा एक और गुणा int
, हमेशा मान्य होता है int
। यहां तक कि अगर यह समान मूल्य नहीं है कि आप सहज रूप से उम्मीद करेंगे क्योंकि गणना अतिप्रवाह होगी।
उदाहरण
निम्नलिखित कोड नमूने पर विचार करें:
public static void main(String[] args) {
int a = 1024;
int b = a * a * a * a;
}
क्या आप एक संकलन त्रुटि उत्पन्न करने की अपेक्षा करेंगे? यह अब थोड़ा अधिक फिसलन हो जाता है।
क्या होगा अगर हम 3 पुनरावृत्तियों के साथ एक लूप डालते हैं और लूप में गुणा करते हैं?
कंपाइलर को ऑप्टिमाइज़ करने की अनुमति है, लेकिन यह ऐसा करते समय प्रोग्राम के व्यवहार को बदल नहीं सकता है।
यह मामला वास्तव में कैसे संभाला जाता है, इस पर कुछ जानकारी:
जावा और कई अन्य भाषाओं में, पूर्णांक बिट्स की एक निश्चित संख्या से युक्त होंगे। गणना जो कि दी गई संख्या में फिट नहीं होती है, अतिप्रवाह होगी ; गणना को मूल रूप से जावा में मापांक 2 ^ 32 किया जाता है, जिसके बाद मान वापस हस्ताक्षरित पूर्णांक में परिवर्तित हो जाता है ।
अन्य भाषाओं या एपीआई बिट्स ( BigInteger
जावा में) की एक गतिशील संख्या का उपयोग करते हैं , एक अपवाद को बढ़ाते हैं या मूल्य को एक जादुई मूल्य जैसे कि-न-एक संख्या निर्धारित करते हैं।