2010-01-07 9 views
9

संभव डुप्लिकेट:
Why this is not compiling in Java?घुंघराले ब्रेसिज़ के बिना आप लूप में इंटीजर को इंटिग क्यों नहीं दे सकते?

जावा में, घुंघराले ब्रेसिज़ छोरों के लिए एक लाइन के लिए वैकल्पिक हैं, लेकिन मैं एक मामले में जहां यह अनुमति नहीं है मिल गया है। उदाहरण के लिए, इस कोड:

for(int i = 0; i < 10; i++) 
    Integer a = i; 

संकलन नहीं होगा, लेकिन यदि आप ऐसा तरह घुंघराले ब्रेसिज़, जोड़ें:

for(int i = 0; i < 10; i++){ 
    Integer a = i; 
} 

कहीं भी होगी। यह कोड संकलित क्यों नहीं होगा?

+2

दिलचस्प है, लगभग ठीक वही सवाल एक सप्ताह पहले पॉप। क्या यह कुछ साक्षात्कार सवाल था? संपादित करें: इसे मिला http://stackoverflow.com/questions/1974641/why-this-is-not-compiling-in-java – BalusC

+0

यह काफी दिलचस्प है। जावा का क्या संस्करण? मेरा अनुमान है कि यह मुक्केबाजी के कारण है। लेकिन यह थोड़ा अजीब है। –

+3

@silky: मुक्केबाजी के साथ ऐसा कुछ नहीं है। (विशेष रूप से यह मुक्केबाजी को लंबे समय से पूर्व निर्धारित करता है और यदि होता है तो 'ए' प्रकार' int' भी होता है।) यह बयान-अभिव्यक्ति और घोषणा के बीच अंतर है यदि स्मृति सेवा करता है ... –

उत्तर

11

क्योंकि एक सिंगल लाइन स्टेटमेंट में एक नया वैरिएबल घोषित करने का अर्थ नहीं होगा क्योंकि यह तुरंत दायरे से बाहर हो जाता है।

यदि आप जावा में statement की परिभाषा को देखते हैं, तो इसमें स्थानीय VariableDeclarationStatement शामिल नहीं है, जबकि block करता है।

-2

मुझे आश्चर्य है कि क्या इस तथ्य के साथ कुछ भी करना है कि निम्नलिखित कथन परिसर है?

for(int i = 0; i < 10; i++) 
    Integer a; 
    a = i; 
8

यदि आपके पास घुंघराले ब्रेसिज़ नहीं हैं, तो आप एक परिवर्तनीय घोषणा नहीं कर सकते हैं। (चर बेकार होगा)

specification देखें। (ए LocalVariableDeclarationStatement केवल एक ब्लॉक के अंदर सीधे हो सकता है।)

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