java数组是静态的,而javaScript的数组是动态的。
当数组被初始化后,该数组的长度就不可变了。java程序中的数组必须经过初始化才可以使用。所谓初始化,就是为数组对象的元素分配内存空间,并为每个数组元素指定初始值。
String[] str ;//声明一个字符串数组,未分配内存
System.out.println(str);
//此时IDE会报错:the local variable str may have been initiated
为指定初始值时,系统会自动为其初始化,以下是各种数据类型以及其对应的初始化值:
byte、short、int、long——0
float、double——0
char——'\u0000'
boolean——false
class、interface、array——null
public class ArrayDemo1 {
public static void main(String[] args) {
int[] i = new int[10];
for(int ii : i ){
System.out.print(ii + "\t");
}
}
}
/*out:
0 0 0 0 0 0 0 0 0 0 */
数组的初始化有以下两种方式:
1、静态初始化:由程序员显式指定每个数组元素的初始值,由系统决定数组长度。
2、动态初始化:由程序员指定数组长度,有系统为数组元素分配初始值。
不管什么方式,一旦初始化后,其长度就不可变,可以通过数组length属性(注意与length()的区别)来访问数组的长度。
public class ArrayDemo1 {
public static void main(String[] args) {
//静态初始化数组
String[] str0 = new String[]{
"静","态","初","始","化"
};//此时new String[]这里的 []是不能填入数据的
for(String s : str0){
System.out.print(s);
}
System.out.println();
//动态初始化数组
String[] str1 = new String[4];
System.out.println(str1.length);
String str2 = new String("123");
System.out.println(str2.length());//调用String对象的length()方法
}
}
/*out:
静态初始化
4
3*/
从上可以看出:
1、对于静态初始化方式,我们无需指定数组的长度,其长度又系统分配。
2、对于动态初始化,我们只需指定数组的长度,即为数组的每个元素分配内存空间,系统为其赋默认值。
需要注意的是:java的数组变量是一种引用类型的变量,数组变量并不是数组本身,它只是指向堆内存中的数组对象。有 时候我们可以改变一个数组变量所引用的数组对象。这样子就造成了数组长度可以改变的假象。
public class ArrayDemo1 {
public static void main(String[] args) {
//静态初始化数组
String[] str0 = new String[]{
"静","态","初","始","化"
};
String[] str1 = new String[]{
"静","态"
};
System.out.println(str0.length);
System.out.println(str1.length);
System.out.println("=========");
str1 = str0;//将str0的引用传递给str1
System.out.println(str0.length);
System.out.println(str1.length);
}
}
/*out:
5
2
=========
5
5
*/
引用类型数组的初始化:
引用类型数组的数组元素依然是引用类型,因此数组元素里存储的还是引用,它指向另一块内存。