This question already has an answer here:
- char and int in Java 2 answers
While creating an array, we can pass
int. So, [why] is
int a = new int['a'] valid? It doesn't throw a compile time error.
What does an array declaration in this form mean?
From JLS Sec 15.10.1:
The type of each dimension expression within a DimExpr must be a type that is convertible (§5.1.8) to an integral type, or a compile-time error occurs.
Each dimension expression undergoes unary numeric promotion (§5.6.1). The promoted type must be int, or a compile-time error occurs.
And from JLS Sec 5.6.1:
If the operand is of compile-time type Byte, Short, Character, or Integer, it is subjected to unboxing conversion (§5.1.8). The result is then promoted to a value of type int by a widening primitive conversion (§5.1.2) or an identity conversion (§5.1.1).
Otherwise, if the operand is of compile-time type byte, short, or char, it is promoted to a value of type int by a widening primitive conversion (§5.1.2).
So, any of
int are acceptable.
'a', a char literal, is allowed, and is promoted to the
int value 97.