2015-06-20 5 views
6

जावा में String... args और String[] args के बीच क्या अंतर है?स्ट्रिंग के बीच कोई अंतर है ... तर्क और स्ट्रिंग [] जावा में तर्क?

मैं जावा प्रोग्रामिंग में नया हूं। क्या कोई मुझे बता सकता है कि (String....args) & (String [] args) के बीच क्या अंतर है यदि मैं दूसरे स्थान पर पहले स्थान का उपयोग करूंगा ........ क्या इससे कोई फर्क पड़ता है?

String... args एक ऐसी विधि घोषित करेगा जो स्ट्रिंग तर्कों की एक चर संख्या की अपेक्षा करता है। तर्कों की संख्या कुछ भी हो सकती है: शून्य सहित।

String[] args और समकक्ष String args[] एक विधि घोषित करेगा जो बिल्कुल एक तर्क की अपेक्षा करता है: तारों की एक सरणी।

एक अंतर जो उन अवलोकनों से बाहर नहीं हो सकता है यह है कि दूसरे मामले में (लेकिन पहले नहीं) कॉलर के पास सरणी का संदर्भ हो सकता है। दोनों मामलों में विधि स्ट्रिंग्स की सरणी के रूप में तर्कों के साथ काम करती है, लेकिन यदि यह सरणी तत्वों को स्वैप करने जैसी चीजें करता है तो यह String... args फ़ॉर्म का उपयोग होने पर कॉलर को दिखाई नहीं देगा।

+1

यह एक अच्छा सवाल है, लेकिन ऐसा लगता है कि यह कई बार पहले पूछा गया है। Http://stackoverflow.com/questions/301563/difference-fnstring-args-vs-fnstring-args – hungryghost

उत्तर

7

कोई फर्क नहीं पड़ता। और String... args की अनुमति है।

JLS-12.1.4. Invoke Test.main का कहना है (भाग में)

विधि मुख्य public, static, और void घोषित किया जाना चाहिए। इसे एक औपचारिक पैरामीटर निर्दिष्ट करना होगा (§8.4.1) जिसका घोषित प्रकार String है। इसलिए, निम्नलिखित घोषणाओं में से किसी स्वीकार्य है:

public static void main(String[] args) 


public static void main(String... args) 

स्पष्ट रूप से सूचीबद्ध नहीं है (लेकिन यह भी अनुमति दी)

public static void main(String args[]) 
+0

देखें, मैं केवल उस अंतिम रूप में फेंक दूंगा, हालांकि तकनीकी रूप से अनुमत और मान्य है, कि 'स्ट्रिंग []' फ़ॉर्म है आम तौर पर बेहतर है क्योंकि ब्रैकेट इंगित करते हैं कि वास्तविक पैरामीटर प्रकार 'स्ट्रिंग []' है और पैरामीटर नाम 'स्ट्रिंग [] 'प्रकार के ऑब्जेक्ट का संदर्भ है।मुझे लगता है कि सम्मेलन की एक प्राथमिकता का अनुमान है ... –

1

मुख्य विधि में बहुत कम अंतर है, वे दोनों एक ही तरीके से काम करेंगे।

स्ट्रिंग ... varargs के रूप में जाना जाता है। Varargs के ऊपर यह है कि यह बहुत अच्छा वाक्य रचनात्मक चीनी है जो आपको एक विधि कॉल के लिए अनिश्चित काल तक तर्क परिभाषित करने देता है। विधि के शरीर में varargs को बिल्कुल प्रकार की सरणी के रूप में माना जाता है।

varargs का नकारात्मक पक्ष जावा अनिश्चित तर्कों को एक नई सरणी में परिवर्तित करेगा, इस प्रकार कचरा बना रहा है। एक विकल्प के रूप में यदि कचरा निर्माण शून्य होना चाहिए तो आप varargs अनुकरण करने के लिए विधि अधिभार का उपयोग कर सकते हैं।

14

आप void x(String...args) विधि है, तो आप यह x("1", "2", "3") के रूप में कॉल कर सकते हैं, जबकि void x(String[] args) केवल x(new String[] {"1", "2", "3"}) के रूप में कहा जा सकता है।

+0

यह सबसे अच्छा जवाब है। यह स्पष्ट रूप से वाक्यविन्यास/उपयोग में अंतर दिखाता है। – hungryghost

+0

@ हंगरीघोस्ट ओपी ने विशेष रूप से 'मुख्य' के बारे में पूछा (और यहां तक ​​कि प्रश्न [टैग: मुख्य] ​​टैग भी किया)। –

+0

@ElliottFrisch, सवाल स्वयं 'मुख्य' का उल्लेख नहीं करता है, हालांकि मुझे लगता है कि इसे इस तरह से टैग किया गया है। 'स्ट्रिंग ... args' बनाम स्ट्रिंग [] args 'वास्तव में एक सामान्य जावा प्रश्न है, लेकिन यदि ओपी विशेष रूप से मुख्य के बारे में सोच रहा है, तो आपका उत्तर ठीक से संबोधित करता है। मैं भी तुम्हारा उत्थान करूंगा (भले ही पूरा प्रश्न एक डुप्लिकेट शुरू हो)! ;) – hungryghost

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