For a message such as the following:

ClassCastException: class [I cannot be cast to class java.lang.Integer

what does [I mean?

The encoding abbreviations are documented in the Class.getName() method.

If this Class object represents an array class, then the result is a string consisting of one or more ‘[’ characters representing the depth of the array nesting, followed by the element type as encoded using the following table:

Element TypeEncoding
booleanZ
byteB
charC
class or interface with binary name NLN;
doubleD
floatF
intI
longJ
shortS

(Binary names are typically just the fully qualified object name, such as java.lang.Object, but can be more complex for nested classes and other types.)