2013-06-15 6 views
18

में जावा का अभ्यास जब मैं बेतरतीब ढंग से इस के साथ आया था:चार प्रकार Incrementing जावा

class test 
{ 
    public static void main(String arg[]) 
    { 
     char x='A'; 
     x=x+1; 
     System.out.println(x); 
    } 
} 

मैंने सोचा कि यह एक त्रुटि फेंक जाएगा, क्योंकि हम संख्यात्मक मान 1 गणित में पत्र A नहीं जोड़ सकते हैं, लेकिन निम्नलिखित प्रोग्राम सही ढंग से चलता है और

B 

यह कैसे संभव है?

+1

'x'' 'बी' का यूनिकोड मान है और '' ए '+ 1 –

+1

का यूनिकोड मान आप चार के एएससीआईआई कोड में int जोड़ रहे हैं, न कि चारों ओर। – Maroun

+7

मेरी इच्छा है कि हम जावा के संदर्भ में _ASCII_ शब्द से छुटकारा पा सकें। जावा 1 99 5 से आसपास रहा है और पूरे समय यूनिकोड का उपयोग कर रहा है। #Grumpymorning। –

उत्तर

27

जावा में, char एक संख्यात्मक प्रकार है। जब आप 1 को char पर जोड़ते हैं, तो आप अगले unicode code point पर जाते हैं। 'A' के मामले में, अगले कोड बिंदु 'B' है:

char x='A'; 
x+=1; 
System.out.println(x); 

ध्यान दें कि आप x=x+1 उपयोग नहीं कर सकते, क्योंकि यह एक अंतर्निहित संकुचन रूपांतरण का कारण बनता है। आपको इसके बजाय x++ या x+=1 का उपयोग करने की आवश्यकता है।

0

क्योंकि टाइप चार प्रभावी रूप से 16-बिट हस्ताक्षरित int की तरह काम करता है।

तो char x='A' सेटिंग int x=65 के बराबर है जब आप एक जोड़ते हैं; आपको 66 मिलते हैं; या ASCII 'बी'।

+3

क्या?! _one_ बाइट नहीं कृपया जावा परिभाषा की जांच करें। –

+0

ठीक है, दो तो। – tbsalling

+2

यह 16 बिट int की तरह _not_ काम करता है। 'char' हस्ताक्षरित है, 'छोटा' नहीं है। – fge

3

char एक संख्यात्मक प्रकार (2 बाइट लंबा) है, और जावा में एकमात्र हस्ताक्षरित संख्यात्मक आदिम प्रकार भी है।

तुम भी कर सकते हैं:

int foo = 'A'; 

यहाँ क्या खास है कि आप एक चरित्र लगातार बजाय की संख्या के साथ char प्रारंभ है। इसके बारे में भी विशेष बात यह है कि इसकी स्ट्रिंग प्रस्तुति है, जैसा कि आप देख सकते हैं। आप Character.digit(c, 10) का उपयोग अपने संख्यात्मक मान (int के रूप में कर सकते हैं, क्योंकि 2^16 - 1 short द्वारा प्रतिनिधित्व योग्य नहीं है!)।

+0

इस जानकारी के लिए धन्यवाद जानने के लिए और भी कुछ है –

0

प्रत्येक char में एक वर्ण कोड है। कंप्यूटर एक चरित्र को एक हस्ताक्षरित संख्या के रूप में देखता है, ताकि आप इसे बढ़ा सकें।

2

जावा में char केवल एक पूर्णांक संख्या है, इसलिए इसे बढ़ाने/घटाना ठीक है। प्रत्येक चार नंबर एक संगत मूल्य, एक एक चरित्र के रूप में यह की व्याख्या, एक रूपांतरण सारणी के आधार पर: यह ASCII एन्कोडिंग, या UTF-8 एन्कोडिंग, आदि

यह सोचने के लिए आओ हो, कंप्यूटर में हर डेटा - छवियों, संगीत, कार्यक्रम, आदि सिर्फ संख्याएं हैं। एक साधारण चरित्र कोई अपवाद नहीं है, यह एन्कोडेड या कोडित एक संख्या के रूप में भी है।

2

char जावा में 2 बाइट यूनिकोड मान के रूप में संग्रहीत किया जाता है। तो यदि char x = 'A', इसका मतलब है कि A यूनिकोड प्रारूप में संग्रहीत है। और यूनिकोड प्रारूप में, प्रत्येक चरित्र को पूर्णांक के रूप में दर्शाया जाता है। तो जब आप x= x+1 कहते हैं, तो यह वास्तव में A के यूनिकोड मान को बढ़ाता है, जो B प्रिंट करता है।

+0

धन्यवाद उत्तर –

3

यह अपने कार्यक्रम के बराबर कार्यक्रम है:

public class Tester { 
    public static void main(String args[]){ 
      char start='\u0041'; 
      char next='\u0041'+1; 
      System.out.println(next); 
    } 
} 

लेकिन जैसा कि आप देख, next=start+1, काम नहीं करेगा। जावा जिस तरह से हैंडल करता है।

कारण हो सकता है कि हम गलती से start उपयोग कर सकते हैं यह सोच कर कि start एक int चर है पूर्णांक 1 साथ, और कहा कि अभिव्यक्ति का उपयोग करें। चूंकि, जावा तार्किक त्रुटियों को कम करने के बारे में इतना सख्त है। उन्होंने मुझे इस तरह से डिजाइन किया।

लेकिन, जब आप करते हैं, यह स्पष्ट है कि '\u0041' एक वर्ण है और 1 को पूर्ण रूप से 2 बाइट में परिवर्तित किया जाएगा। प्रोग्रामर द्वारा यह कोई गलती नहीं की जा सकती है। हो सकता है कि यही कारण है कि उन्होंने इसे अनुमति दी है।

char जावा में 2 बाइट्स है। charunicode वर्णों का समर्थन करता है। जब आप ऑफ़सेट पूर्णांक वाले char var को जोड़ते या घटाते हैं, तो यूनिकोड तालिका में समतुल्य unicode वर्ण का परिणाम होगा। चूंकि, BA के बगल में है, तो आपको B मिल गया है।

+0

इस जानकारी के लिए धन्यवाद –

4

char वास्तव में int पर मैप किया गया है, Ascii Table पर देखें।

उदाहरण के लिए: एक राजधानी एक दशमलव संख्या 65 से मेल खाती है जब आप कि char को 1 जोड़ रहे हैं, तो आप मूल रूप से 1. द्वारा दशमलव संख्या को बढ़ा देते तो संख्या 66 हो जाता है, जो राजधानी बी से मेल खाती है

+0

लिंक के लिए धन्यवाद अब मुझे समझ में आया कि जावा एक नंबर के रूप में चार देखता है –

1

आप इस तरह कोष्ठक का उपयोग कर जोड़ने के बाद परिणाम डाली लिखने की आवश्यकता:

x='A'; 
x = (char) (x+1); 
बाकी

आप डेटा त्रुटि के ढीले मिल जाएगा।

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