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数组及其内存分配

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

  • 相关阅读:
    Windows 获取unix timestamp
    SQL Server 2008 R2:快速清除日志文件的方法
    mysql lost connection to server during query
    jquery 隐藏 显示 动画效果
    session
    javaScript日期
    路径惹的祸
    Declaration terminated incorrectly 讨厌 这样就不可以了
    jsp 调用其他jsp页面 跳转
    SQL 2008 启用和禁用xp_cmdshell
  • 原文地址:https://www.cnblogs.com/Baronboy/p/6172241.html
Copyright © 2011-2022 走看看