Home Java数组和内存分配 - 数组初始化
Post
Cancel

Java数组和内存分配 - 数组初始化

数组初始化

Java 数组时静态的.

Java 是典型的静态语言(什么是静态语言,见 《Java 是静态语言,静态语言是什么,那与动态语言的区别?》)。 因此 Java 数组在编译时就已经确定了大小,即在运行时是不可变的。Java 程序中,数组必须经过初始化才能使用。 所谓初始化,就是为数组分配内存空间和创建实际的对象。数组有两种初始化方式:静态初始化和动态初始化。

静态初始化

初始化时,有程序员显示指定数组中每个元素的初始值,由系统决定数组的长度。

动态初始化

初始化时,程序员只指定数组的长度,由系统为数组元素分配初始值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    public static void main(String[] args) {

        String[] animals = new String[3];

        String[] habits = new String[]{"篮球", "足球", "排球", "羽毛球"};

        String[] names = new String[]{"李四", "钟馗", "李白", "妲己", "小乔"};

        float[] weights = new float[5];

        boolean[] booleans = new boolean[5];

        System.out.println("第一个数组长度: " + animals.length);
        System.out.println("第二个数组长度: " + ages.length);
        System.out.println("第三个数组长度: " + names.length);
        System.out.println("第四个数组第一个值: " + weights[0]);
        System.out.println("第五个数组第一个值: " + booleans[0]);
  }
  // 输出:
  // 第一个数组长度: 3
  // 第二个数组长度: 4
  // 第三个数组长度: 5
  // 第四个数组第一个值: 0.0
  // 第五个数组第一个值: false

以下是 animals, ages, names 三个变量 和 各自引用的数组在内存中的分布情况: img.png

需要注意几点:

  • 从代码输出中还可以看出,如果是基本数据类型,比如 float 数组的默认值是 0.0,如果是引用类型(这里是 String),则默认为 null。
  • Java 的数组变量是一种引用类型的变量,数组变量本身不是数组,它只是指向堆内存的数组对象的引用。因此你可以改变数组变量的指向,让它指向另一个数组对象。从而达到改变数组长度的假象。示例代码如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    public static void main(String[] args) {
      String[] a1 = new String[3];
      System.out.println("a1数组长度: " + a1.length);
      a1 = new String[5];
      System.out.println("a1数组长度: " + a1.length);
    }
    // 输出:
    // a1数组长度: 3
    // a1数组长度: 5
    

weixin.png

公众号名称:怪味Coding
微信扫码关注或搜索公众号名称
This post is licensed under CC BY 4.0 by the author.