数组是一种可以经过位置索引,快速、随机地存取其中元素的集合数据结构。java
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.
注意:数组元素(内容)自己能够是基本数据类型或对象引用类型,可是数组变量(引用)则指向数组对象。数组对象并不是是从某个类实例化而来,而是由 JVM 直接建立的。所以查看数组对象类名的时侯会发现都是一些奇怪的相似于 "[I" 这样的字符。数组
数组对象的父类是 java.lang.Object,因此能够调用 Object 类中的全部方法如 toString()。bash
实现以下:数据结构
public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); }
每一个数组对象对应的类,能够经过 RTTI(Run-Time Type Information)于运行时检查code
char[] c = {'a', 'b', 'c'} int[] i = {1, 2, 3} long[] l = {1l, 2l, 3l} float[] i = {1f, 2f, 3f} String[] s={"aa","bb","cc"}; System.out.println(c); System.out.println(i); System.out.println(l); System.out.println(f); System.out.println(s);
Output:orm
[C [I [J [F [Ljava.lang.String
数组对象能够获取长度属性(只读) length。
数组是不可变的,指的就是数组长度内的内存空间。数组元素的内容容许经过赋值形式改变,而对数组变量赋值则会指向不一样数组对象。对象
有关内存分配:
声明数组只是分配固定的引用空间大小,因为还没有赋值不指向任何数组对象。
数组对象必定存放在堆上,数组变量则不必定。无论是基本类型变量,仍是对象引用类型变量,只要是局部变量就存放在栈上,对象引用类型变量指向的对象则必定存放在堆上。索引
Java 是一门强类型、静态类型语言,编译器会根据数组的声明类型防止放入错误类型。内存
数组初始化方式:get
case 1:
int[] arr = {1, 2, 3};
case 2:
int[] arr = new int[]{1, 2, 3};
case 3:
int[] arr = new int[3]; arr[0] = 1; arr[1] = 2; arr[2] = 3;
bad case 1: 不能在给定初始值的同时给定长度
int[] arr = new int[3]{1, 2, 3};
初始值已经决定数组长度,若再给出长度限制,二者不一致 Java 将没法正常工做。
咱们经过数组变量结合位置索引,便可操做数组中的元素。