zoukankan      html  css  js  c++  java
  • Java数组及其内存分配

    几乎所有的程序设计语言都支持数组。Java也不例外。当我们需要多个类型相同的变量的时候,就考虑定义一个数组。在Java中,数组变量是引用类型的变量,同时因为Java是典型的静态语言,因此它的数组也是静态的,所以想要使用就必须先初始化(为数组对象的元素分配空间)。

    1.数组的初始化方式及其内存分配

    对于Java数组的初始化,有以下两种方式,这也是面试中经常考到的经典题目:

    1. 静态初始化:初始化时由程序员显式指定每个数组元素的初始值,由系统决定数组长度,如:
      1 //只是指定初始值,并没有指定数组的长度,但是系统为自动决定该数组的长度为4
      2 String[] computers = {"Dell", "Lenovo", "Apple", "Acer"};  //①
      3 //只是指定初始值,并没有指定数组的长度,但是系统为自动决定该数组的长度为3
      4 String[] names = new String[]{"多啦A梦", "大雄", "静香"};  //②
    2. 动态初始化:初始化时由程序员显示的指定数组的长度,由系统为数据每个元素分配初始值,如:
      1 //只是指定了数组的长度,并没有显示的为数组指定初始值,但是系统会默认给数组数组元素分配初始值为null
      2 String[] cars = new String[4];  //③

    前面提到,因为Java数组变量是引用类型的变量,所以上述几行初始化语句执行后,三个数组在内存中的分配情况如下图所示:

    Java数组及其内存分配

    由上图可知,静态初始化方式,程序员虽然没有指定数组长度,但是系统已经自动帮我们给分配了,而动态初始化方式,程序员虽然没有显示的指定初始化值,但是因为Java数组是引用类型的变量,所以系统也为每个元素分配了初始化值null,当然不同类型的初始化值也是不一样的,假设是基本类型int类型,那么为系统分配的初始化值也是对应的默认值0。

    对于多维数组,假设有这么一段代码:

    1 int[][] nums = new int[2][2];2 nums[0][1] = 2;

    那么他在内存中的分配情况如下:

    Java数组及其内存分配

    由上图可知,并没有真正的多维数组,它的本质其实是一维数组。

  • 相关阅读:
    Java实现 LeetCode 50 Pow(x,n)
    Java实现 LeetCode 50 Pow(x,n)
    Java实现 LeetCode 49 字母异位词分组
    Java实现 LeetCode 49 字母异位词分组
    Java实现 LeetCode 49 字母异位词分组
    Java实现 LeetCode 48 旋转图像
    Java实现 LeetCode 48 旋转图像
    Java实现 LeetCode 48 旋转图像
    Java实现 LeetCode 47 全排列 II(二)
    Java实现 LeetCode 47 全排列 II(二)
  • 原文地址:https://www.cnblogs.com/Baronboy/p/6172241.html
Copyright © 2011-2022 走看看