2013-04-05 1 views
8

क्या आप कृपया बता सकते हैं कि पिछले 2 प्रिंट स्टेटमेंट में क्या चल रहा है? यही वह जगह है जहां मैं हार गया।मैं तीसरे और चौथे प्रिंट स्टेटमेंट में वर्णों के बजाय पूर्णांक क्यों लौटा रहा हूं?

public class Something 
{ 
    public static void main(String[] args){ 
     char whatever = '\u0041'; 

     System.out.println('\u0041'); //prints A as expected 

     System.out.println(++whatever); //prints B as expected 

     System.out.println('\u0041' + 1); //prints 66 I understand the unicode of 1  adds up the 
     //unicode representing 66 but why am I even returning an integer when in the previous statement I returned a char? 

     System.out.println('\u0041' + 'A'); //prints 130 I just wanted to show that adding an 
     //integer to the unicode in the previous print statement is not implicit casting because 
     //here I add a char which does not implicitly cast char on the returned value 

    } 
} 
+0

चूंकि 'char' को 'int' के रूप में डाला जाता है। यदि आप मूल्यों को जोड़ना चाहते हैं, तो उन्हें 'स्ट्रिंग' में बदल दें। –

+0

char से int में रूपांतरण जावा में निहित है। –

+0

Charecters पूर्णांक के अलावा कुछ भी नहीं हैं। – eatSleepCode

उत्तर

8

यह इसलिए होता है क्योंकि की Binary Numeric Promotion

जब एक ऑपरेटर ऑपरेशंस की एक जोड़ी में द्विआधारी संख्यात्मक पदोन्नति लागू करता है, जिनमें से प्रत्येक को मूल्य वें इंगित करना चाहिए पर एक संख्यात्मक प्रकार के लिए परिवर्तनीय है, निम्नलिखित नियमों के क्रम में लागू होते हैं,, रूपांतरण (§5.1.2) आवश्यक के रूप में परिवर्तित करने के लिए ऑपरेंड चौड़ा करने का उपयोग कर:

  • तो ऑपरेंड में से किसी एक संदर्भ प्रकार का है, unboxing रूपांतरण (§5.1.8) किया जाता है। फिर:
  • यदि या तो ऑपरेंड डबल प्रकार का है, तो दूसरा डबल में परिवर्तित हो जाता है।
  • अन्यथा, यदि ऑपरेंड फ्लोट प्रकार का है, तो दूसरा फ्लोट में परिवर्तित हो जाता है।
  • अन्यथा, यदि ऑपरेंड लंबे समय तक है, तो दूसरा लंबा रूपांतरित हो जाता है।
  • अन्यथा, दोनों ऑपरेटरों को टाइप int में परिवर्तित कर दिया जाता है।

असल में, दोनों ऑपरेंड एक int में बदल दिए जाते हैं, और फिर System.out.println(int foo) कहा जाता है। केवल प्रकार है कि +, * द्वारा दिया जा सकता है, आदि double, float, long, और int

+1

ठीक है आखिरी प्रिंट स्टेटमेंट के बारे में क्या? क्या यूनिकोड और 'ए' एक ही प्रकार नहीं माना जाता है? –

+0

@KacyRaye। उस लिंक में उस अंतिम स्थिति को देखें। पदोन्नति कम से कम 'int' है। इसलिए, किसी बाइनरी अभिव्यक्ति का परिणाम न्यूनतम 'int' प्रकार हो सकता है। –

+0

@KacyRaye: आपको एक संपादन में जवाब दिया – durron597

2

'\u0041' + 1int पैदा करता है, तो आप char करने के लिए इसे कास्ट करने के लिए इतना है कि javac println(char करने के लिए कॉल बांधता है) की जरूरत के बजाय prinln(int)

System.out.println((char)('\u0041' + 1)); 
0

whatever हैं एक चार है, और इसका मतलब है ++whateverwhatever = whatever + 1 (अनदेखी उपसर्ग क्रम)

के बाद से वहाँ एक काम है शामिल, परिणाम चार में परिवर्तित हो गया है, इसलिए चार विधि कहा जाता है। लेकिन 3-4 वें प्रिंट में, कोई असाइनमेंट नहीं है, और नियम के अनुसार, सभी योग ऑपरेशन डिफ़ॉल्ट रूप से int में होता है। तो प्रिंट ऑपरेशन से पहले, यह char + char और char+int को बताता है, और चूंकि कोई बैक असाइनमेंट नहीं है, इसलिए यह ऑपेशन के बाद int के रूप में रहता है, इसलिए पूर्णांक विधि कहा जाता है।

संबंधित मुद्दे

 संबंधित मुद्दे