देखें: Conversions and promotions
कि के अनुसार, अपने int
long
के लिए प्रोत्साहित किया जाता है और फिर मूल्यांकन किया जाता है।
उदाहरण के लिए, int
+ double
और शेष प्राइमेटिव के साथ होता है। अर्थात।
System.out(1 + 2.0);// prints 3.0 a double
अलावा ऑपरेटर
के लिए जैसा कि मैंने काफी यह एक ही है, लेकिन मैं इसके बारे में किसी भी संदर्भ नहीं है।
कंपाइलर के स्रोत के लिए एक त्वरित दृश्य से पता चलता है कि वे अलग हैं।
पूर्णांक इसके लिए
अर्थात् iadd
और लंबे समय से इसके लिए ladd
:
इस नमूना कोड देखें:
$javap -c Addition
Compiled from "Addition.java"
public class Addition extends java.lang.Object{
public Addition();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: aload_0
1: iconst_0
2: aaload
3: invokestatic #2; //Method java/lang/Integer.parseInt:(Ljava/lang/String;)I
6: istore_1
7: aload_0
8: iconst_0
9: aaload
10: invokestatic #3; //Method java/lang/Long.parseLong:(Ljava/lang/String;)J
13: lstore_2
14: iload_1
15: iload_1
16: iadd
17: istore 4
19: iload_1
20: i2l
21: lload_2
22: ladd
23: lstore 5
25: return
}
पंक्ति को देखें: जब उत्पन्न बाइट कोड संकलित
$cat Addition.java
public class Addition {
public static void main(String [] args) {
int a = Integer.parseInt(args[0]);
long b = Long.parseLong(args[0]);
// int addition
int c = a + a;
// long addition
long d = a + b;
}
}
$javac Addition.java
$
यह है 16
यह कहता है: iadd
(int अतिरिक्त के लिए) जबकि लाइन 22
कहती है 012 (लंबी वर्धन के लिए)
इसके अलावा, के रूप में आप अपने अभिव्यक्ति में व्यापक आदिम प्रकार का एक चर में बताए जाते हैं तो इसे सुरक्षित इतने लंबे समय के अलग अलग पुरातन साथ गणित प्रदर्शन करने के लिए है?
हाँ, और यह भी "सुरक्षित" छोटे आकार के साथ गणित प्रदर्शन करने के लिए है, इस अर्थ में, वे इस कार्यक्रम नहीं टूटते, तो आप सिर्फ जानकारी खो देते हैं।
उदाहरण के लिए, यह देखने के लिए कि क्या होता है Integer.MAX_VALUE
को Integer.MAX_VALUE जोड़ने का प्रयास करें या int x = (int) (Long.MAX_VALUE - 1);
यह एक मंच नहीं है, यह उन लोगों के लिए वास्तव में पारदर्शी नहीं है जिन्होंने आपके प्रश्न का उत्तर दिया है कि आपके पास अनुवर्ती है। यद्यपि आपके संपादन के लिए: जावा आपको एक चर के लिए एक ऑपरेशन के परिणाम को आवंटित करने की अनुमति नहीं देगा यदि चर एक प्राचीन प्रकार का "विस्तृत" नहीं है जो इसे पकड़ने के लिए पर्याप्त है।अन्यथा बताए गए, आप int को विशेष रूप से कास्टिंग किए बिना int में "0L + 1" का परिणाम असाइन नहीं कर सकते हैं। –
आह ठीक है, यह समझ में आता है। अनुवर्ती कार्रवाई के लिए धन्यवाद। – BordrGuy108
यह पूरी तरह से सुरक्षित नहीं है क्योंकि कई परिचालनों में अंडरफ्लो या ओवरफ़्लो हो सकता है। Long.MAX_VALUE + 1 आज़माएं, हालांकि यदि आप सबसे व्यापक प्रकार को असाइन करते हैं तो यह हमेशा संकलित होगा। –