java - कोई विचार क्यों मुझे(इंट)के लिए एक पूर्णांक डालने की आवश्यकता है?




syntax casting (8)

Integer i3 = (Integer) (-128);

समस्या यह है - संकलक इसे एक ऑपरेटर के रूप में देखता है

निम्नलिखित उदाहरण में

int i = -128;
Integer i2 = (Integer) i; // compiles

Integer i3 = (Integer) -128; /*** Doesn't compile ***/

Integer i4 = (Integer) (int) -128; // compiles
Integer i4 = -128; // compiles
Integer i5 = (int) -128; // compiles
Integer i6 = (Integer) (-128); // compiles
Integer i7 = (Integer) 0-128; // compiles

मैं (Integer) साथ -128 डाली नहीं कर सकता, लेकिन मैं (int) -128 को कास्ट कर सकता हूं

मैं हमेशा सोचा था कि -128 int प्रकार का था और उसे कास्टिंग (int) साथ बेमानी होना चाहिए

i3 साथ लाइन पर त्रुटि है

cannot find symbol variable Integer

मैंने इसे जावा 6 अपडेट 2 9 और जावा 7 अपडेट 1 के साथ करने की कोशिश की

संपादित करें: आपको +128 बजाए +128 साथ वही व्यवहार मिलता है यह एकजुट और बाइनरी ऑपरेटरों के बीच भ्रम की स्थिति में दिखता है।


मैंने जेएलएस संदर्भ पाया 15.16

 CastExpression:
    ( PrimitiveType Dimsopt ) UnaryExpression
    ( ReferenceType ) UnaryExpressionNotPlusMinus

जैसा कि आप देख सकते हैं, किसी प्राचीन प्रकार को कास्ट करने के लिए किसी भी UnaryExpression आवश्यकता होती है, जबकि एक संदर्भ प्रकार को कास्टिंग करने के लिए एक UnaryExpressionNotPlusMinus आवश्यकता होती है। ये केवल जेएलएस 15.15 में कास्ट एक्सप्रेशन से पहले परिभाषित किए गए हैं।

आपको कलाकारों को एक आदिम प्रकार में बदलने की आवश्यकता है:

... (int) -128;

या आप अभिव्यक्ति को कास्ट के दाईं ओर एक गैर-प्लस-शून्य से एकरूप अभिव्यक्ति में बदल सकते हैं:

... (Integer) (-128);  // Either
... (Integer) 0 - 128; // Or

सी # संकलक के समान व्यवहार है यह एक बेहतर संकेत देता है कि वह क्यों संकलित करने में विफल रहता है:

नकारात्मक मान डालने के लिए, आपको कोष्ठकों में मान को लगाया जाना चाहिए


रेखा 3 का अर्थ है जैसे आप कोष्ठक में अभिव्यक्ति से 128 को घटाकर कोशिश कर रहे हैं और कोष्ठकों में अभिव्यक्ति नहीं है और यह टाइप इंट की अभिव्यक्ति नहीं है (यह '-' एक 'ऑपरेटर' के रूप में कार्य करता है)। यदि आप अभिव्यक्ति को इसमें बदलते हैं:

Integer i3 = (Integer) (-128);

तो कंपाइलर समझ जाएगा कि '-' एक नकारात्मक पूर्णांक है जो नकारात्मक पूर्णांक को इंगित करता है


संकलक (Integer) के लिए कास्टिंग -128 बजाय 128 से (Integer) घटाना चाहता है इसे ठीक करने के लिए () जोड़ें

Integer i3 = (Integer) -128; // doesn't compile
Integer i3 = (Integer) (-128); // compiles

बोल्टक्लॉक के अनुसार टिप्पणी में int कास्ट करने के उद्देश्य से काम करता है, क्योंकि यह एक आरक्षित शब्द है और इसलिए इसे पहचानकर्ता के रूप में नहीं समझा जा सकता, जो मुझे समझ में आता है

और Bringer128 को JLS संदर्भ मिला 15.16

 CastExpression:
    ( PrimitiveType Dimsopt ) UnaryExpression
    ( ReferenceType ) UnaryExpressionNotPlusMinus

जैसा कि आप देख सकते हैं, किसी प्राचीन प्रकार को कास्ट करने के लिए किसी भी UnaryExpression आवश्यकता होती है, जबकि एक संदर्भ प्रकार को कास्टिंग करने के लिए एक UnaryExpressionNotPlusMinus आवश्यकता होती है। ये केवल जेएलएस 15.15 में कास्ट एक्सप्रेशन से पहले परिभाषित किए गए हैं।


कंपाइलर ने व्याख्या की है - दो-आरजी ऋण ऑपरेटर के रूप में, अर्थात् वह Integer नामक किसी अन्य संख्या से 128 को घटाने की कोशिश कर रहा है, लेकिन इस तरह के क्षेत्र में ऐसा कोई चर नहीं है।

यह संकलित:

Integer i3 = (Integer) (-128)

यह इसे Integer <minus operator> 128 रूप में पार्स करता है Integer <minus operator> 128 और चर Integer नहीं ढूँढ रहा है आपको ब्रैकेट में -128 को लपेटने की आवश्यकता होगी:

Integer i3 = (Integer) (-128);  // compiles

बस इसे इस तरह से करें ...

Double d = 13.5578;
int i = d.intValue();
System.out.println(i);




java syntax casting