दिलचस्प पोस्ट
फाइल के आखिर में कोई नई लाइन नहीं है, तो `आखिरी पंक्ति 'को पढ़ने के लिए` बैड' का उपयोग कैसे करें? आंकड़ों के एक पृष्ठ को पूछने और इकाई ढांचा 4.1 में कुल गिनती करने का बेहतर तरीका क्या है? कस्टम स्विफ्ट क्लास को एनएससीडींग के साथ UserDefaults में सहेज रहा है एंड्रॉइड स्टूडियो – बाह्य पुस्तकालय / जार आयात करना Xcode 4.3.1 के साथ मैक पर रूबी को अपडेट करने का मुद्दा क्या आप एक एचटीएमएल रेडियो बटन को चेकबॉक्स की तरह दिख सकते हैं? लीगसी कोड बेस को सीवीएस से डिस्ट्रीब्यूटेड रिपॉजिटरी में स्थानांतरित करना (जैसे कि git या मर्काइकल) शुरुआती भंडार डिजाइन के लिए आवश्यक सुझाव प्रत्येक चरित्र के बाद csvwriter.writerow () कॉमा क्यों डालता है? तेजी से समय बीत चुका है Xcode 6 और Xcode 5 एक ही कंप्यूटर पर एक साथ रह सकते हैं? गतिशील रूप से jQuery के साथ फॉर्म के मान भरें एंड्रॉइड स्टूडियो 1.3 में प्रॉक्सी के पीछे आईओएस पर बातचीत / फोन कॉल कैसे रिकॉर्ड कर सकता हूं? Xcode4.2 स्वचालित संदर्भ गिनती को अक्षम कैसे करें जब एक डेटाबेस डिजाइन Denormalize करने के लिए

जावा में, दो वर्णों को एक इंट या एक चार जोड़ के परिणाम हैं?

जब 'a' + 'b' जोड़ते हैं तो यह पैदा करता है 195. क्या आउटपुट डेटाैट char या int ?

Solutions Collecting From Web of "जावा में, दो वर्णों को एक इंट या एक चार जोड़ के परिणाम हैं?"

जावा वर्ण, शॉर्ट्स, या बाइट को जोड़ने का नतीजा एक इंट है :

बाइनरी संख्यात्मक संवर्धन पर जावा भाषा विशिष्टता :

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

लेकिन ध्यान दें कि यौगिक असाइनमेंट ऑपरेटरों (जैसे + =) के बारे में क्या कहता है :

बाइनरी ऑपरेशन का नतीजा बाएं हाथ वाले प्रकार के रूप में परिवर्तित होता है … और रूपांतरण का परिणाम चर में जमा होता है।

उदाहरण के लिए:

 char x = 1, y = 2; x = x + y; // compile error: "possible loss of precision (found int, required char)" x = (char)(x + y); // explicit cast back to char; OK x += y; // compound operation-assignment; also OK 

एक तरह से आप परिणाम के प्रकार का पता लगा सकते हैं, सामान्य तौर पर, इसे किसी ऑब्जेक्ट में डालें और यह पूछें कि यह किस वर्ग की है:

 System.out.println(((Object)('a' + 'b')).getClass()); // outputs: class java.lang.Integer 

यदि आप प्रदर्शन में दिलचस्पी रखते हैं, तो नोट करें कि जावा बाइटकोक के पास छोटे डेटा प्रकारों के साथ अंकगणित के लिए समर्पित निर्देश भी नहीं हैं। उदाहरण के लिए, जोड़ने के लिए, iadd ( iadd लिए), ladd ( ladd लिए), dadd (फ्लोट के लिए), dadd (डबल्स के लिए), और यही है। छोटे प्रकार के साथ x += y अनुकरण करने के लिए, कंपाइलर iadd का उपयोग iadd और फिर i2c ("int to char") जैसे एक निर्देश का उपयोग करके int के ऊपरी बाइट को शून्य करेगा। अगर मूल सीपीयू 1-बाइट या 2-बाइट डेटा के लिए समर्पित निर्देशों को समर्पित है, तो यह चलने वाले समय के लिए अनुकूलित करने के लिए जावा वर्चुअल मशीन पर निर्भर है।

यदि आप अक्षर को एक संख्यात्मक प्रकार के रूप में व्याख्या करने के बजाय स्ट्रिंग के रूप में जोड़ना चाहते हैं, तो ऐसा करने के कई तरीके हैं सरलतम स्ट्रिंग को अभिव्यक्ति में जोड़ना आसान है, क्योंकि स्ट्रिंग में एक वर्ण और स्ट्रिंग परिणाम जोड़ना। इन सभी अभिव्यक्ति का परिणाम स्ट्रिंग "ab" :

  • 'a' + "" + 'b'
  • "" + 'a' + 'b' (यह इसलिए काम करता है क्योंकि "" + 'a' पहले मूल्यांकन किया जाता है; यदि "" "195"
  • new String(new char[] { 'a', 'b' })
  • new StringBuilder().append('a').append('b').toString()
  • String.format("%c%c", 'a', 'b')

char और byte पर बाइनरी अंकगणितीय संचालन (और short ) int -जेएलएस 5.6.2 को बढ़ावा देती है।

आप char बारे में निम्न भाव सीखना चाह सकते हैं।

 char c='A'; int i=c+1; System.out.println("i = "+i); 

यह जावा में पूरी तरह से मान्य है और 66 रिटर्न करता है, c+1 ( c+1 ) के चरित्र (यूनिकोड) के इसी मान


 String temp=""; temp+=c; System.out.println("temp = "+temp); 

यह जावा में भी मान्य है और स्ट्रिंग प्रकार चर temp स्वचालित रूप से c प्रकार को स्वीकार करता है और कंसोल पर temp=A बनाता है।


सभी निम्नलिखित बयान जावा में भी वैध हैं!

 Integer intType=new Integer(c); System.out.println("intType = "+intType); Double doubleType=new Double(c); System.out.println("doubleType = "+doubleType); Float floatType=new Float(c); System.out.println("floatType = "+floatType); BigDecimal decimalType=new BigDecimal(c); System.out.println("decimalType = "+decimalType); Long longType=new Long(c); System.out.println("longType = "+longType); 

हालांकि c एक प्रकार का char , इसे संबंधित कन्स्ट्रक्टरों में कोई त्रुटि नहीं के साथ आपूर्ति की जा सकती है और उपर्युक्त सभी बयानों को वैध बयान के रूप में माना जाता है वे क्रमशः निम्नलिखित आउटपुट का उत्पादन करते हैं।

 intType = 65 doubleType = 65.0 floatType = 65.0 decimalType = 65 longType =65 

char एक आदिम अंकीय अभिन्न प्रकार है और जैसे इन जानवरों के सभी नियमों और रूपांतरणों सहित सभी नियमों के अधीन है। आप इस पर पढ़ना चाहते हैं, और इसके लिए जेएलएस सबसे अच्छे स्रोतों में से एक है: रूपांतरण और प्रचार । विशेष रूप से, "5.1.2 चौड़ा करने वाले आदिम रूपांतरण" पर कम बिट को पढ़ें।

जावा कंपाइलर इसे किसी एक के रूप में व्याख्या कर सकता है

एक प्रोग्राम लिखकर और कंपाइलर त्रुटियों की तलाश करके देखें:

 public static void main(String[] args) { int result1 = 'a' + 'b'; char result2 = 'a' + 'b'; } 

अगर यह एक चार है, तो पहली पंक्ति मुझे एक त्रुटि देगी और दूसरा नहीं होगा। यदि यह एक इंट है, तो इसके विपरीत होगा।

मैंने इसे संकलित किया और मुझे ….. कोई त्रुटि नहीं मिली। तो जावा दोनों स्वीकार करता है।

हालांकि, जब मैंने उन्हें मुद्रित किया, मुझे मिल गया:

int: 1 9 5

चार: एक

क्या होता है जब आप करते हैं:

 char result2 = 'a' + 'b' 

एक अंतर्निहित रूपांतरण किया जाता है ( इंट से चार तक "आदिम संकुचित रूपांतरण")।

द्विआधारी पदोन्नति नियमों के अनुसार , यदि ऑपरेंड्स न तो दोहरा है, तो फ्लोट या लम्बे, दोनों को प्रो में बढ़ावा दिया जाता है हालांकि, मैं चार प्रकार की संख्याओं के उपचार के खिलाफ कड़ाई से सलाह देता हूं, इस तरह से इसके उद्देश्य को हराया

हालांकि आपके पास सही उत्तर पहले से ही है (जेएलएस में संदर्भित), यह सत्यापित करने के लिए यहां कोड का थोड़ा सा है, जिसमें आपको दो char एस जोड़ते समय एक int मिल जाती है

 public class CharAdditionTest { public static void main(String args[]) { char a = 'a'; char b = 'b'; Object obj = a + b; System.out.println(obj.getClass().getName()); } } 

आउटपुट है

java.lang.Integer

char को Unicode मानों के रूप में दर्शाया जाता है और जहां यूनिकोड मान \u Hexadecimal द्वारा Hexadecimal मानों के बाद प्रदर्शित होते हैं।

जैसा कि किसी भी अंकगणितीय संचालन के लिए char मूल्यों को int लिए प्रोत्साहित किया जाता है, इसलिए 'a' + 'b' का परिणाम के रूप में गणना की जाती है

1.) Unicode Table उपयोग से संबंधित char के Unicode मानों को लागू करें

2.) हेक्साडेसिमल को दशमलव रूपांतरण पर लागू करें और फिर Decimal मानों पर ऑपरेशन करें।

  char Unicode Decimal a 0061 97 b 0062 98 + 195 

Unicode To Decimal Converter

उदाहरण

 0061 

(0 * 16 3 ) + (0 * 16 2 ) + (6 * 16 1 ) + (1 * 16 0 )

(0 * 4096) + (0 * 256) + (6 * 16) + (1 * 1)

0 + 0 + 96 + 1 = 97

 0062 

(0 * 16 3 ) + (0 * 16 2 ) + (6 * 16 1 ) + (2 * 16 0 )

(0 * 4096) + (0 * 256) + (6 * 16) + (2 * 1)

0 + 0 + 96 + 2 = 98

इसलिए 97 + 98 = 195


उदाहरण 2

 char Unicode Decimal Ջ 054b 1355 À 00c0 192 -------- 1547 + 1163 - 7 / 260160 * 11 % 

यहाँ कुछ अजीब है, हालांकि। निम्नलिखित संकलन:

 char x; x = 'a' + 'b'; 

लेकिन यह नहीं है:

 char x; x = 'a'; x = x + 'b'; 

ऐसा प्रतीत होता है कि दोनों एक्सप्रेशन ('a' + 'b' और x + 'b') निम्नलिखित परीक्षणों द्वारा पूर्णांक में परिणाम:

 Object obj = 'a'+'b'; System.out.println(obj.getClass().getName()); char x = 'a'; Object obj2 = x+'b'; System.out.println(obj2.getClass().getName()); 

तो दूसरा मामला क्यों संकलित नहीं होगा? संयोग से, आप इसे चार वर्णों के रूप में संपूर्ण अभिव्यक्ति का कास्टिंग करके ठीक कर सकते हैं:

 x = (char)(x+'b'); 

यह जावा के शब्दों में असंगतता की तरह लगता है – कोई भी चार अभिव्यक्ति किसी भी संदर्भ में दूसरे के साथ परस्पर विनिमय करने योग्य होना चाहिए। क्या किसी को इस बारे में समझने का तरीका पता है?