A variable is a storage location and has an associated type, sometimes called its
compile-time type, that is either a primitive type (§4.2) or a reference type (§4.3).
A variable always contains a value that is assignment compatible (§5.2) with its
type. A variable's value is changed by an assignment (§15.25) or by a prefix or
postfix ++
(increment) or --
(decrement) operator (§15.13.2, §15.13.3, §15.14.1,
§15.14.2).
Compatibility of the value of a variable with its type is guaranteed by the design of the Java language. Default values are compatible (§4.5.4) and all assignments to a variable are checked for assignment compatibility (§5.2), usually at compile time, but, in a single case involving arrays, a run-time check is made (§10.10).