It is inconsistent. I suppose the actual reason for the distinction can only be found in the early history of Java language development. Perhaps it was for what seemed at the time to be performance reasons. I suspect that if Java were being (re)designed from scratch today, the length
field would disappear and instead there would be a java.lang.Array
class* (similar to java.lang.Enum
) from which all arrays would derive and which would include a length()
method inherited by all arrays.
Actually, the lack of an Array
class (in the above sense) may indicate why there's a length
attribute: arrays are more "built in" to the language than, say, the collection classes (which are part of a class library).
* Java does have java.lang.reflect.Array
, but that does something completely different from what I'm talking about.