2008-11-19 14 views
53

क्या इस वाक्य उपयोगी के लिए:अंतर fn (String ... args) fn बनाम (String [] args)

function(String... args) 

function(String[] args) 
अंतर के साथ

लेखन के रूप में यह एक ही है केवल जबकि लागू इस विधि या क्या इसमें कोई अन्य सुविधा शामिल है?

उत्तर

78

दोनों के बीच एकमात्र अंतर यह है कि आप फ़ंक्शन को कॉल करते हैं। स्ट्रिंग var तर्क के साथ आप सरणी निर्माण को छोड़ सकते हैं।

function(arg1, arg2, arg3); 

जबकि दूसरा एक:

public static void main(String[] args) { 
    callMe1(new String[] {"a", "b", "c"}); 
    callMe2("a", "b", "c"); 
    // You can also do this 
    // callMe2(new String[] {"a", "b", "c"}); 
} 
public static void callMe1(String[] args) { 
    System.out.println(args.getClass() == String[].class); 
    for (String s : args) { 
     System.out.println(s); 
    } 
} 
public static void callMe2(String... args) { 
    System.out.println(args.getClass() == String[].class); 
    for (String s : args) { 
     System.out.println(s); 
    } 
} 
6

रिसीवर आकार पर आपको स्ट्रिंग की एक सरणी मिल जाएगी। अंतर केवल कॉलिंग पक्ष पर है।

7

आप के रूप में पहली फ़ंक्शन को कॉल

String [] args = new String[3]; 
args[0] = ""; 
args[1] = ""; 
args[2] = ""; 
function(args); 
8

varargs साथ (String...) आप विधि इस तरह से कॉल कर सकते हैं:

function(arg1); 
function(arg1, arg2); 
function(arg1, arg2, arg3); 

वाई कहां सरणी के साथ ऐसा नहीं कर सकता (String[])

+0

मेरा पसंदीदा उत्तर –

+0

साफ़ और संक्षिप्त! –

17

अंतर केवल विधि का आह्वान करते समय ही होता है। दूसरा रूप एक सरणी के साथ लगाया जाना चाहिए, पहला फॉर्म किसी सरणी के साथ लगाया जा सकता है (जैसे कि दूसरा, हाँ, यह जावा मानक के अनुसार मान्य है) या स्ट्रिंग्स की सूची (कॉमा द्वारा अलग किए गए एकाधिक तार) या बिना किसी तर्क के (सभी में हमेशा एक होना चाहिए, कम से कम शून्य को पारित किया जाना चाहिए)।

यह वाक्य रचनात्मक रूप से चीनी है। असल में संकलक

function(new String[] { s1, s2, s3 }); 

आंतरिक रूप में

function(s1, s2, s3); 

बदल जाता है।

2
class StringArray1 
{ 
    public static void main(String[] args) { 
     callMe1(new String[] {"a", "b", "c"}); 
     callMe2(1,"a", "b", "c"); 
    callMe2(2); 
     // You can also do this 
     // callMe2(3, new String[] {"a", "b", "c"}); 
} 
public static void callMe1(String[] args) { 
     System.out.println(args.getClass() == String[].class); 
     for (String s : args) { 
      System.out.println(s); 
     } 
    } 
    public static void callMe2(int i,String... args) { 
     System.out.println(args.getClass() == String[].class); 
     for (String s : args) { 
      System.out.println(s); 
     } 
    } 
} 
संबंधित मुद्दे