Java细节整理——数组与内存控制

重点:使用Java数组之前,必须对数组对象进行初始化。

当数组的所有元素都被分配了合适的内存空间,并指定了初始值时,数组的初始化完成。程序以后将不能重新改变数组对象在内存中的位置和大小。

知识点整理:

1.数组的初始化有以下两种方式:

1)静态初始化:初始化时由程序员显示指定每个数组元素的初始值,由系统决定数组的长度。

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

不管使用哪种方式初始化Java数组,一旦初始化完成,该数组的长度就不可改变。

代码示例:

public class Demo {
    public static void main(String[] args) {

        // 采用静态初始化方式
        String[] books = new String[] { "一千零一夜", "唐诗三百首", "警示寓言", "一个人的圣朝", };
        // 采用静态初始化的简化形式
        String[] names = { "小红", "小明", "小绿", };
        // 采用动态初始化的的方式
        String[] strArr = new String[5];

        // 访问数组以上长度
        System.out.println("第一个数组的长度是" + books.length);
        System.out.println("第二个数组的长度是" + names.length);
        System.out.println("第三个数组的长度是" + strArr.length);
    }
}

Java语言的数组变量是引用类型的变量,books,names,strArr这3个变量以及各自引用的数组在内存中的分配如图:

总结:对于静态初始化方式而言,程序员无需指定数组长度,指定该数组的数组元素,由系统来决定该数组的长度即可。即names是3,books是4。

而执行动态初始化时,程序员只需指定数组的长度,即为每个数组元素指定所需的内存空间,系统将负责为这些数组元素分配初始值。指定初始值时,系统将按如下规则分配初始值:

1)数组元素的类型是基本类型中的整数类型(byte,short,int和long),则数组元素的值是0;

2)数组元素的类型是基本类型中的字符类型(char),则数组元素的值是‘\u0000‘;

3)数组元素的类型是基本类型中的浮点类型(float,double),则数组元素的值是0.0;

4)数组元素的类型是基本类型中的布尔类型(boolean),则数组元素的值是false;

5)数组元素的类型是引用类型(类,接口和数组),则数组元素的值为null;

原文地址:https://www.cnblogs.com/1693977889zz/p/8992997.html

时间: 2024-11-09 03:01:00

Java细节整理——数组与内存控制的相关文章

java 基础概念 -- 数组与内存控制

问题1: Java在声明数组的过程中,是怎样分配内存的? 在栈内存中 建一个数组变量,再在堆内存中 建一个 数组对象.至于详细的内存分配细节,还得看 该初始化是 数组动态初始化 还是 数组静态初始化. 问题2: Java数组的初始化方式 有哪几种? 两种:动态初始化 和 静态初始化.动态初始化 指的是 仅仅指定数组的长度,不指明每个数组的元素.  静态初始化 指的是 详细指定数组的每个元素. 问题3: Java 的基本类型数组 和 应用类型数组 之间,在初始化时的内存分配机制有什么差别? Jav

Java数组与内存控制

一.Java数组初始化 Java数组是静态的,即当数组被初始化之后,该数组的长度是不可变的.Java数组使用之前必须先对数组对象进行初始化,所谓初始化,就是为数组的所有元素分配内存空间,并为每个数组元素指定初始值.(文章来源于李刚老师的<突破java程序员的16课>) 1:基本类型数组的两种初始化方式 静态初始化:初始化时由程序员显式指定每个数组元素的初始值,由系统决定数组长度. 动态初始化:初始化时程序员只指定数组长度,由系统为数组元素分配初始值. 不要同时使用静态初始化和动态初始化,也就是

数组及其内存控制

作者:禅楼望月(http://www.cnblogs.com/yaoyinglong/) 静态的Java数组 Java语言是典型的静态语言,因而,数组也是静态的,即当该数组被初始化之后,该数组的长度是不可变的. java 语言的数组变量是引用类型,什么意思呢?意思就是,数组变量并不是数组本身,它只是指向堆内存中的数组对象.如: 这3个变量以及各自引用的数组在内存中的分配如图: 我们平时可以通过改变数组变量的指向,让它指向的堆内存中的其他数组对象(前提是他们的编译类型是兼容的),从表面上看起来好像

透过字节码分析java基本类型数组的内存分配方式。

我们知道java中new方式创建的对象都是在堆中创建的,而局部变量对应的值存放在栈上.那么java中的int [] arr={1,2,3}是存放在什么地方的呢,int []arr = new int[3]又是存放在什么地方的呢, 下面我们通过编写两个小例子,通过查看生成的字节码文件,来了解jvm会如何来处理这两种情况的. 1.int[] arr = new int[3]示例 public class ArrayTest { public static void main(String[] arg

【JAVA基础教程】-浅谈数组及其内存控制

在用JAVA数据前我们都知道必须要先对数组对象进行初始化.当数组的所有元素都被分配合适的内存空间,当制定了初始值时,数组初始化完成.程序以后将不能重新改变数组对象在内存中的位置和大小.那么: 1.JAVA数组为静态,即一旦初始化后,其长度是不可改变的. 2. 数组变量是引用变量,并不是数组对象本身. 3. 两种初始化方式: 动态初始化:指定数组的长度,初始值自动生成. 静态初始化:指定初始值,长度自动生成. 4. JAVA中,引用变量本身无需初始化,引用变量所引用的对象是需要初始化的. 5. 所

程序员的基本功之数组与内存控制

1.数组初始化 Java的数组是静态的,既数组一旦初始化之后,该数组的长度就不可变,Java的数组需要初始化才能使用 数组的初始化就是为数组对象在堆内存中分配一段数组长度的连续的内存空间,并设定初始值(注意并不是数组变量初始化,而是数组对象) 初始化的方式有两种: 1)静态初始化:程序员显示的指定每个数组元素的初始值,并由系统决定数组的长度 2)动态初始化:初始化时只指定数组的长度,由系统为数组元素分配初始值 数组变量本身是引用类型,存储在栈内存中,而数组对象存储在堆内存中 int[] arr1

一,数组与内存控制

一,数组的初始化 1,数组初始化之后,长度不变,且数组初始化后才可以使用,所谓得初始化,就是为数组对象得元素分配内存空间,并且指定初始值. 2,初始化的两种方式:静态初始化,初始化时显式指定每个数组元素的初始值,由系统决定数组长度. 动态初始化,初始化时,只是指定数组长度,有系统为数组元素分配初始值. 3,java数组变量时引用类型变量,不是数组本身,它时只想堆内存中的数组对象. 例如: int arr[] arr=new int[]{1,2,3} 执行int arr[]之后,这是在main()

《数据结构》 java的一维数组的内存结构与其特性

1{数组的概念: 数组是相同类型变量的集合,可以使用共同的名字引用它.数组也可以被定义为任何类型,可以是一维或者二维的.数组的访问时通过其对应的下标来实现的.数组提供了一种将有联系的信息便利分组的方式:} 2{一维数组: 一维数组实际上是相同变量的一组列表.要创建一个数组就必须先对数组的变量类型先定义,通过一维数组的声明格式为: 数组类型 数组名称 []:} 3{创建数组的步骤: 1:声明数组: 2: 为数组开创空间 3:当数组为对象时,使用之前必须对数组进行创建和初始化:} 4{一维数组的创建

Java中数组在内存中的图解

Java中的数组在内存中的图解,其实对于数组,还是比较熟悉的,平时用的也是很多的,在看数据结构与算法的极客时间专栏,最常用的10个数据结构:数组.链表.栈.队列.散列表.二叉树.堆.跳表.图.Trie树,其中数组是最基础,也是学起来最简单的一种数据结构,数组是一种线性表数据结构.它用一组连续的内存空间,来存储一组具有相同类型的数据. 以下三张图片都是极客时间专栏中的,嘿嘿嘿!!! 数组是计算机分配的一组连续的内存空间 接下来,具体到Java语言,来说说数组吧:(这个是传智播客上的讲解图,这么好的