2011-10-28 18 views
8

निम्न कोड से उत्पादन 123 है क्योंकि substring beginIndex से लेता है ENDINDEX - 1. हालांकि, मैं हैरान कैसे यहाँ char के रूप में 3 (int) समझा जाता है क्योंकि substring दो ints ले रहा हूँ । इसके पीछे अवधारणा क्या है?किसी पूर्णांक पैरामीटर के साथ एक विधि में चार पासिंग

String x = "12345"; 
char a = 3; 
x = x.substring(0, a); 
System.out.println(x); 

उत्तर

12

यह सभी तरह से वापस C, जहां char एक संकीर्ण पूर्णांक प्रकार संक्षेप में है और परोक्ष जब भी आवश्यक int में परिवर्तित हो जाता करने के लिए चला जाता है।

जावा में, इसे तकनीकी रूप से "विस्तृत करने वाले आदिम रूपांतरण" के रूप में जाना जाता है, और इसे section 5.1.2 of the JLS में शामिल किया गया है।

+0

+1 प्रति ..यह एक अक्षर या चरित्र के रूप में 'char' के बारे में सोचने के लिए उबलता है, लेकिन इसके बजाय डेटा के एक टुकड़े के रूप में कि कंप्यूटर एक पत्र या चरित्र को मैप करने में सक्षम है। फिर, इस प्रक्रिया को सुविधाजनक बनाने के लिए, हमने कुछ शॉर्टकट बनाए हैं ताकि हमें अक्षरों या अक्षरों को 'char' (जैसे 'char c =' x '' पर सीधे असाइन किया जा सके; 'इसका मतलब है "चर के द्वारा प्रतिनिधित्व किए गए डेटा का एक टुकड़ा है वह मान जो 'x' अक्षर को मैप करता है। "चर 'c' सिस्टम में डेटा के किसी अन्य भाग की तुलना में कोई अक्षर नहीं है।) – corsiKa

0

तो सबस्ट्रिंग की फ़ंक्शन घोषणा सबस्ट्रिंग (int startIndex, int endIndex) की तरह दिखती है। अब जब आप चार पास करते हैं तो इसे स्वचालित रूप से पूर्णांक (एंड इंडेक्स) में प्रचारित किया जाता है और इसलिए int के रूप में माना जाता है।

0

अनुभाग 5.1.2 पर एक नज़र डालें, जहां यह रूपांतरणों को विस्तृत करने पर चर्चा करता है।

0

इसे निहित कास्टिंग के रूप में जाना जाता है। वही होता है यदि आप एक डबल मान को असाइन करते हैं। त्वरित उदाहरण

double d = 1; 

1 एक int है लेकिन यह परोक्ष double (1.0) के लिए डाली है।

3

अन्य पहले से ही बताए गए हैं कि यह क्यों काम करता है लेकिन ध्यान दें कि सूचकांक के लिए चार चर का उपयोग करना बुरा अभ्यास है, क्योंकि उनके पास अलग-अलग संबद्ध अर्थशास्त्र हैं और इस प्रकार यह एक सूचकांक के रूप में एक char का उपयोग करने में भ्रमित है।

वर्ण डेटा को स्टोर करने के लिए केवल वर्णों का उपयोग करें और शायद बेहतर: चार से पूरी तरह से बचने की कोशिश करें, क्योंकि वे प्रत्येक चरित्र को स्टोर करने के लिए पर्याप्त विस्तृत नहीं हैं (यूनिकोड और कोड पॉइंट चर्चा देखें)। इसके बजाय चरित्र कोड बिंदुओं को स्टोर करने के लिए int का उपयोग करें।

0

char a = 3; में, आप 0011, 3. चार की बाइनरी मूल्य भंडारण के रूप में यह के बारे में सोच सकता है '3' वास्तव में संग्रहित किया जा रहा है: यदि आप के इलाज की कोशिश की एक चार है, तो आप 3 नहीं मिलेगा। लेकिन अगर आप

char a = '3';

अब क्या आप चार 3, 51 के एक ascii मूल्य भंडारण कर रहे हैं, और यदि आप पूर्णांक में के रूप में उपयोग करने की कोशिश की, तो आप 51.

0

तकनीकी तौर पर, इस मिलेगा ऐसा इसलिए है क्योंकि charint का एक उप प्रकार है।

लगाने के लिए कि substring(int,int) तर्क (int,char) के लिए लागू है, हम पहले 15.12.2.2 Phase 1: Identify Matching Arity Methods Applicable by Subtyping कोशिश, हम परीक्षण करने के लिए charint की एक उप-प्रकार है कि क्या जरूरत है। Per 4.10.1 Subtyping among Primitive Types, यह है।

फिर, int पैरामीटर के लिए char तर्क आवंटित करने के लिए 15.12.4.5 Create Frame, Synchronize, Transfer Control के अनुसार, हम 5.3 Method Invocation Conversion, जो int को char बदल देता है, लागू 5.1.2 Widening Primitive Conversion

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