搜尋
首頁Javajava教程Java 中的可變參數函數

Funciones variádicas en Java

可變參數函數是一種接受不定數量參數的函數。

讓我們看看 Java 中這些函數的原因是什麼。假設我們有一個求和方法,它接收兩個整數並傳回兩者的總和。

public static int summation(int a, int b) {
    return a + b;
}

如果我們想要將三個數字相加,我們必須重載求和方法以接受三個參數。

public static int summation(int a, int b, int c) {
    return a + b + c;
}

如果我們想將四個數字相加會發生什麼事?同樣,求和方法必須重載。

public static int summation(int a, int b, int c, int d) {
    return a + b + c + d;
}

正如我們所見,這是不可擴展的,因為每次需要不同數量的參數時,方法都必須再次重載。此時,您可以考慮傳遞一個整數數組作為參數,但這只不過是包裝實際參數並使該方法現在明確依賴於新的資料類型。

對於這些情況,存在可變參數函數,可以接受無限數量的參數,而不需要將它們包裝在另一種類型的可見結構中。重要的是要考慮到 Java 在內部所做的是使用傳遞給可變參數函數的參數來建立數組,因此我們可以使用數組的方法。

可變參數函數的宣告方式與任何普通函數相同,但作為參數,它的最後一個或唯一的參數必須符合以下格式:資料類型...變數名稱。在聲明方式中,唯一改變的是在資料類型後面增加了三個點...。在某些語言中,這種類型的參數稱為 varargs。讓我們看看求和方法如何像可變參數函數。

public static int summation(int... numbers) {
    int sum = 0;

    for (int number : numbers) {
        sum += number;
    }

    return sum;
}

現在我們可以添加任意數量的數字,而無需重載求和方法,唯一的限制是它們必須具有相同的資料類型。

System.out.println(summation(1, 2)); // 3
System.out.println(summation(1, 2, 3)); // 6
System.out.println(summation(1, 2, 3, 4)); // 10
System.out.println(summation(2, 8, 16, 32, 64, 128, 256, 512, 1024, 2048)); // 4090

之前提到過,Java 在內部將可變參數函數的參數作為數組處理,即將它們包裝在數組中,這允許我們使用數組的方法。例如,您可以使用 Arrays 類別的 sum 方法在求和方法中將陣列的所有元素相加。

public static int summation(int... numbers) {
    return Arrays.stream(numbers).sum();
}

考慮到上述情況,可變參數函數也可以作為參數傳遞它接受的資料類型的數組,無論它看起來多麼奇怪。這樣,Java 不再需要將參數包裝在陣列中,因為陣列是直接作為參數傳遞的。

public static int summation(int a, int b) {
    return a + b;
}

但是,如果求和方法由於某種原因需要 double 類型的第二個參數,除了聲明為可變參數函數時已經可以接收的 n 個整數,會發生什麼情況。在這種情況下,必須使用所需的附加參數來聲明求和方法,並在末尾添加可變參數或 varargs,如下所示。

public static int summation(int a, int b, int c) {
    return a + b + c;
}

透過這種方式,你可以傳遞一個double 數字作為第一個參數,以及你想要添加的整數作為附加參數,Java 會自動知道第一個參數是double 類型,後面的參數是int 類型,考慮一下參數variadic 應該始終是函數的最後一個參數,而不是第一個參數,因為它會產生編譯錯誤,甚至IDE 本身也會告訴我們以下內容:varargs 參數必須是最後一個參數。

public static int summation(int a, int b, int c, int d) {
    return a + b + c + d;
}

總之,如果需要某個實用函數來執行某種類型的具有不定數量參數的操作,並且我們不想明確傳遞數組或列表,則可以考慮使用可變參數函數。這些很有用,它們使程式碼更乾淨、更具可擴展性,並且避免方法重載。

以上是Java 中的可變參數函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
JVM性能與其他語言JVM性能與其他語言May 14, 2025 am 12:16 AM

JVM'SperformanceIsCompetitiveWithOtherRuntimes,operingabalanceOfspeed,安全性和生產性。 1)JVMUSESJITCOMPILATIONFORDYNAMICOPTIMIZAIZATIONS.2)c提供NativePernativePerformanceButlanceButlactsjvm'ssafetyFeatures.3)

Java平台獨立性:使用示例Java平台獨立性:使用示例May 14, 2025 am 12:14 AM

JavaachievesPlatFormIndependencEthroughTheJavavIrtualMachine(JVM),允許CodeTorunonAnyPlatFormWithAjvm.1)codeisscompiledIntobytecode,notmachine-specificodificcode.2)bytecodeisisteredbytheybytheybytheybythejvm,enablingcross-platerssectectectectectross-eenablingcrossectectectectectection.2)

JVM架構:深入研究Java虛擬機JVM架構:深入研究Java虛擬機May 14, 2025 am 12:12 AM

TheJVMisanabstractcomputingmachinecrucialforrunningJavaprogramsduetoitsplatform-independentarchitecture.Itincludes:1)ClassLoaderforloadingclasses,2)RuntimeDataAreafordatastorage,3)ExecutionEnginewithInterpreter,JITCompiler,andGarbageCollectorforbytec

JVM:JVM與操作系統有關嗎?JVM:JVM與操作系統有關嗎?May 14, 2025 am 12:11 AM

JVMhasacloserelationshipwiththeOSasittranslatesJavabytecodeintomachine-specificinstructions,managesmemory,andhandlesgarbagecollection.ThisrelationshipallowsJavatorunonvariousOSenvironments,butitalsopresentschallengeslikedifferentJVMbehaviorsandOS-spe

Java:寫一次,在任何地方跑步(WORA) - 深入了解平台獨立性Java:寫一次,在任何地方跑步(WORA) - 深入了解平台獨立性May 14, 2025 am 12:05 AM

Java實現“一次編寫,到處運行”通過編譯成字節碼並在Java虛擬機(JVM)上運行。 1)編寫Java代碼並編譯成字節碼。 2)字節碼在任何安裝了JVM的平台上運行。 3)使用Java原生接口(JNI)處理平台特定功能。儘管存在挑戰,如JVM一致性和平台特定庫的使用,但WORA大大提高了開發效率和部署靈活性。

Java平台獨立性:與不同的操作系統的兼容性Java平台獨立性:與不同的操作系統的兼容性May 13, 2025 am 12:11 AM

JavaachievesPlatFormIndependencethroughTheJavavIrtualMachine(JVM),允許Codetorunondifferentoperatingsystemsswithoutmodification.thejvmcompilesjavacodeintoplatform-interploplatform-interpectentbybyteentbytybyteentbybytecode,whatittheninternterninterpretsandectectececutesoneonthepecificos,atrafficteyos,Afferctinginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginging

什麼功能使Java仍然強大什麼功能使Java仍然強大May 13, 2025 am 12:05 AM

JavaispoperfulduetoitsplatFormitiondence,對象與偏見,RichstandardLibrary,PerformanceCapabilities和StrongsecurityFeatures.1)Platform-dimplighandependectionceallowsenceallowsenceallowsenceallowsencationSapplicationStornanyDevicesupportingJava.2)

頂級Java功能:開發人員的綜合指南頂級Java功能:開發人員的綜合指南May 13, 2025 am 12:04 AM

Java的頂級功能包括:1)面向對象編程,支持多態性,提升代碼的靈活性和可維護性;2)異常處理機制,通過try-catch-finally塊提高代碼的魯棒性;3)垃圾回收,簡化內存管理;4)泛型,增強類型安全性;5)ambda表達式和函數式編程,使代碼更簡潔和表達性強;6)豐富的標準庫,提供優化過的數據結構和算法。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。