The question is basically self-explanatory. I haven't been able to find an API for arrays (other than this Arrays, but this just defines a bunch of static helper functions for dealing with actual arrays). If there is no class for it, this seems to suggest that an array can't be an Object
.
However, the fact that an array has public fields like length
and methods that it can invoke like .equals()
and .clone()
seem to suggest (very strongly) the complete opposite.
What is the explanation for the odd presentation and behavior of primitive arrays?
As a note, I tried to use the "Open Implementation" Eclipse feature on the .clone()
method of an array just now, hoping that I would be able to look at where and how this method was defined (since it said int[] overrode it from Object), but it actually caused my entire Eclipse to freeze up and crash...
No, arrays are not primitive datatypes in Java. They are container objects which are created dynamically.
Examples of non-primitive types are Strings, Arrays, Classes, Interface, etc.
An array is a collection of similar data types. Array is a container object that hold values of homogenous type. It is also known as static data structure because size of an array must be specified at the time of its declaration.
Arrays of primitive types hold primitive types. "Every Java Programmers knows, Array is a collection of Objects, it doesn't matter whether it contains primitive data types or Strings." Wrong. An array is an object, but it doesn't necessarily contain objects.
There is a class for every array type, so there's a class for int[]
, there's a class for Foo[]
. These classes are created by JVM. You can access them by int[].class
, Foo[].class
. The direct super class of these classes are Object.class
public static void main(String[] args) { test(int[].class); test(String[].class); } static void test(Class clazz) { System.out.println(clazz.getName()); System.out.println(clazz.getSuperclass()); for(Class face : clazz.getInterfaces()) System.out.println(face); }
There's also a compile-time subtyping rule, if A
is subtype of B
, A[]
is subtype of B[]
.
The Java Language Specification should give you an idea:
The direct superclass of an array type is Object.
Every array type implements the interfaces
Cloneable
andjava.io.Serializable
.
Moreover:
An object is a class instance or an array.
So arrays are not instances and therefore you don't need a constructor to create them. Instead you use the Array Creation Expressions.
See the below code. It compiles:
int[] arr = new int[2];
System.out.println(arr.toString());
Now, on any primitive type, you cannot call a method(toString()
) defined in Object class (Or, any method for that matter)... So, an array is essentially an Object
.
OK, here you go:
From the JLS Section 4.3:
There are four kinds of reference types: class types (§8), interface types (§9), type variables (§4.4), and array types (§10).
And, Section 10:
In the Java programming language, arrays are objects (§4.3.1), are dynamically created, and may be assigned to variables of type Object (§4.3.2). All methods of class Object may be invoked on an array.
So, from the first quote, Array
is not actually a class... It is another type. But, essentially arrays are objects, though not of some Class
, but they are of Array
type. So they are not instances of some class, and may be objects of array
are defined to be created that way...
So short and simple, yes <Type>[] is a type of Object
. It extends directly from Object
as I understand it. There are all the Object methods on it, toString()
, hashCode()
, ... Plus a special exposed variable called length
. The class java.util.Arrays
is a utility class for dealing with types of Arrays. It's a little confusing when you add to the mess things like: int[]
does not inherit from Object[]
. Also, unlike other Object
types, there are no constructors for array types. They respect the new
keyword but that is usually to allocate for the size. It's a little bizarre, but just one of those language quirks.
To answer the question though, yes they are an object.
An array is a container object that holds a fixed number of values of a single type.
See http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With