Lesson Completion
Back to course

Varargs: Variable-Length Arguments

Beginner
15 minutesā˜…4.7Java

1. The Hook (The "Byte-Sized" Intro)

  • In a Nutshell: Varargs (variable arguments) let methods accept any number of arguments. Internally, Java converts them to an array.
  • Syntax: Type... name.

When Slack sends messages to multiple channels: sendTo("Hello", channel1, channel2, channel3...). Any number of recipients!


2. Conceptual Clarity

šŸ’” The Analogy: Pizza Toppings

  • Regular param = Fixed toppings (cheese, sauce)
  • Varargs = "Add any toppings you want..."
  • Internally = All toppings become an array
graph LR Call["sum(1, 2, 3, 4, 5)"] --> Method["int sum(int... nums)"] Method --> Array["nums = {1, 2, 3, 4, 5}"]

3. Technical Rules

RuleExample
Only one varargs per methodvoid m(int... a, int... b) āŒ
Must be last parametervoid m(int... a, String s) āŒ
Can pass array directlysum(new int[]{1, 2, 3}) āœ…
Can pass zero argumentssum() āœ…

4. Interactive & Applied Code

java
public class VarargsDemo { public static void main(String[] args) { // === BASIC VARARGS === System.out.println(sum(1, 2, 3)); // 6 System.out.println(sum(1, 2, 3, 4, 5)); // 15 System.out.println(sum()); // 0 (empty) // === PASS ARRAY === int[] numbers = {10, 20, 30}; System.out.println(sum(numbers)); // 60 // === MIXED PARAMETERS === greet("Hello", "Alice", "Bob", "Charlie"); // === PRINT ALL (like System.out.printf) === printAll("Values:", 1, 2, 3); // === REAL-WORLD: Logger === log("Error", "File not found", "path=/home/user", "code=404"); // === REAL-WORLD: String join === String result = join("-", "a", "b", "c"); System.out.println(result); // "a-b-c" } // Basic varargs static int sum(int... numbers) { int total = 0; for (int n : numbers) { // Treat as array total += n; } return total; } // Varargs with regular parameter (varargs MUST be last) static void greet(String greeting, String... names) { for (String name : names) { System.out.println(greeting + ", " + name + "!"); } } // Print any number of objects static void printAll(String prefix, Object... items) { System.out.print(prefix + " "); for (Object item : items) { System.out.print(item + " "); } System.out.println(); } // Real-world: Logging with context static void log(String level, String message, String... context) { System.out.print("[" + level + "] " + message); if (context.length > 0) { System.out.print(" | Context: "); System.out.print(String.join(", ", context)); } System.out.println(); } // Join with delimiter static String join(String delimiter, String... parts) { return String.join(delimiter, parts); } }

āš ļø Common Mistakes

Mistake #1: Varargs not last

java
void method(int... nums, String s) { } // āŒ Compile error! void method(String s, int... nums) { } // āœ… Correct

Mistake #2: Multiple varargs

java
void method(int... a, String... b) { } // āŒ Only one allowed!

Mistake #3: Null ambiguity

java
printAll(null); // Ambiguous! Is null the array or an element? printAll((Object[]) null); // āœ… Explicit cast

5. The "Interview Corner"

šŸ† Q1: "How does varargs work internally?" Answer: Compiler converts method(1, 2, 3) to method(new int[]{1, 2, 3}). Varargs is syntactic sugar for array parameter.

šŸ† Q2: "Varargs vs Array parameter?" Answer:

  • Varargs: sum(1, 2, 3) or sum(arr)
  • Array: sum(arr) only Varargs is more flexible at call site.

šŸ† Q3: "What if varargs method overloaded?" Answer: Compiler prefers exact match. method(int) chosen over method(int...) for single arg. Can cause ambiguity warnings.


šŸŽ“ Key Takeaways

āœ… Syntax: Type... paramName
āœ… Must be last parameter
āœ… Only one varargs per method
āœ… Internally becomes array
āœ… Can pass zero to N arguments
āœ… Common in printf, String.format, builders

Topics Covered

Java FundamentalsArrays

Tags

#java#arrays#data-structures#multidimensional-arrays#beginner-friendly

Last Updated

2025-02-01