public static void printObjects(Object... objects) { for (Object obj : objects) { System.out.println(obj); } }Here, `Object... objects` means the method can take zero or more `Object` arguments. How Varargs Work with Objects
Object
)public class VarargsExample { public static void main(String[] args) { printObjects("Hello", 42, 3.14, new int[]{1, 2, 3}); } public static void printObjects(Object... objects) { for (Object obj : objects) { System.out.println(obj); } } }
Hello 42 3.14 [I@1b6d3586> The last output `[I@1b6d3586` represents an array (`int[]`), as arrays do not override `toString()`.
printObjects(); // Works fine, prints nothingSince varargs allow zero arguments, the method executes without errors.
Object[] objArray = {"Java", 100, true}; printObjects(objArray);This works the same way as passing individual arguments.
Object... objects
is equivalent to Object[] objects
.
public static void display(String message, Object... objects) { }
display("Info", 1, "text", 3.5);
public static void display(Object... objects, String message) {}
(Varargs must be last)public static void print(Object[] arr) { } public static void print(Object... arr) { }
log(Object... messages)
debug(Object... values)
void method(int x) { } method(10); // exact match
void method(long x) { } method(10); // int â long (widening)
void method(Integer x) { } method(10); // int â Integer (autoboxing)
void method(Object x) { } method(10); // int â Integer â Object
void method(int... x) { } method(10); // int â int... (varargs)
void method(Long x) { } method(10); // ERROR: int â long (widening), but not â Long void method(Object x) { } method(10); // OK: int â Integer â Object (boxing then widening, not allowed in one step, but valid via separate overload)
Conversion Type | Priority | Notes |
---|---|---|
Exact match | 1 | No conversion needed |
Widening primitive | 2 | Safe and automatic |
Boxing / Unboxing | 3 | Automatic, but lower priority |
Widening then Boxing | 4 | Allowed, but rarely best match |
Varargs | 5 | Lowest priority |