WIDENING BOXING AND VARARGS 7 RULES

Resul Rzayev
2 min readMay 11, 2020

1. Primitive Widening > Boxing > Varargs.

2. Widening and Boxing (WB) not allowed.

3. Boxing and Widening (BW) allowed.

4. While overloading Widening + vararg and boxing + vararg are mutually exclusive of each other.

5. Widening between wrapper classes not allowed

6. Widening+varArgs & Boxing+varargs are individually allowed (but not allowed in overloaded version of method)

7. Boxing+Widening is preferred over Boxing+Varargs.

foo(5);

foo(Integer i) and foo(long l) // long (by Rule 1)

//Explanation:

//int to Integer — boxing

//int to long — widening

// Rule 1: widening > boxing

foo(int…i) and foo(Integer i) // Integer (by Rule 1)

//Explanation:

//int to int… — varargs

//int to Integer — boxing

// Rule 1: boxing > varargs

foo(long…l) and foo(Integer i) // Integer (Rule 1)

//Explanation:

//int to long… — varargs

//int to Integer — boxing

// Rule 1: boxing > varargs

foo(Object o) and foo(int…i) // Object o (Rule 1)

//Explanation:

//int to int… — varargs

//int to Object — boxing

// Rule 1: boxing > varargs

foo(Object o) and foo(long l) // long l (Rule 1)

//Explanation:

//int to long — widening

//int to Object — boxing

// Rule 1: widening > boxing

foo(Object o) and foo(Integer… l) // Object o (Rule 1)

//Explanation:

//int to Integer… — boxing + varargs

//int to Object — boxing

// Rule 1: boxing > varargs

foo(Long l) and foo(int…i) // int…i (Rule 2 )

//Explanation:

//int to Long — widening (to long) + boxing (to Long)

//int to int… — varargs

// Rule 2: widening + boxing is not allowed

foo(Long l) and foo(Integer…i) // Integer…i(Rule 2)

//Explanation:

//int to Long — widening (to long) + boxing (to Long)

//int to Integer… — boxing + varargs

// Rule 2: widening + boxing is not allowed

foo(Object o) and foo(Long l) // Object o (Rule 2)

//Explanation:

//int to Long — widening (to long) + boxing (to Long)

//int to Object — boxing

// Rule 2: widening + boxing is not allowed

foo(long…l) and foo(Integer…i) // ambiguous (Rule 4)

//Explanation:

//int to long… — widening + varargs

//int to Integer… — boxing + varargs

// Rule 4: widening + vararg and boxing + vararg are mutually exclusive of each other.

--

--