Java千百问_06数据结构(014)_java数组如何存储在内存中

点击进入_更多_Java千百问

1、数组的内存空间是何时分配的

java中的数组是用来存储同一种数据类型的数据结构,一旦初始化完成,即所占的空间就已固定下来,初始化的过程就是分配对应内存空间的过程。即使某个元素被清空,但其所在空间仍然保留,因此数组长度将不能被改变。

了解什么是数组看这里:java中的数组是什么

当仅定义一个数组变量(int[] numbers)时,该变量还未指向任何有效的内存,因此不能指定数组的长度,只有对数组进行初始化(为数组元素分配内存空间)后才可以使用。

数组初始化分为静态初始化(在定义时就指定数组元素的值,此时不能指定数组长度)和动态初始化(只指定数组长度,由系统分配初始值)。

//静态初始化
int[] numbers = new int[] { 3, 5, 12, 8, 7 };
String[] names = { "Miracle", "Miracle He" };//使用静态初始化的简化形式
//动态初始化
int[] numbers = new int[5];
String[] names = new String[2];

建议不要混用静态初始化和动态初始化,即不要既指定数组的长度的同时又指定每个元素的值。

当初始化完毕后,就可以按索引位置(0~array.length-1)来访问数组元素了。

当使用动态初始化时,如在对应的索引位未指定值的话,系统将指定相应数据类型对应的默认值(整数为0,浮点数为0.0,字符为’\u0000’,布尔类型为false,引用类型(包括String)为null)。

public class TestArray {
    public static void main(String[] args) {
        String[] names = new String[3];
        names[0] = "Miracle";
        names[1] = "Miracle He";
        /*
        for(int i = 0; i < names.length;i++) {
            System.out.print(names[i] + " ");
        }
        */
        //还可以使用foreach来遍历
        for(String name : names) {
            System.out.print(name + " ");
        }
    }
}

结果如下:

Miracle Miracle He null

Miracle Miracle He null

2、数组在内存中如何储存

首先给出数组(数组引用和数组元素)在内存中的存放形式,如图:

数组引用变量是存放在栈内存(stack)中,数组元素本质是一个对象,是存放在堆内存(heap)中。通过栈内存中的指针指向对应元素的在堆内存中的位置来实现访问。

了解堆和栈看这里:[java堆和栈有什么区别][3]

[3]:

当数组在初始化时,就会在堆中分配对应的空间,这个大小是不会因为内部元素的变化而变化,也就是说,如果数组中某个元素被清空,数组占用的内存空间也不会缩小。

存放引用类型数组在内存中如何储存看这里:[引用类型数组在内存中如何储存][4]

[4]:

时间: 2024-10-10 03:42:29

Java千百问_06数据结构(014)_java数组如何存储在内存中的相关文章

Java千百问_06数据结构(018)_多维数组如何储存在内存中

点击进入_更多_Java千百问 1.多维数组如何储存在内存中 了解一维数组如何储存看这里:java数组如何存储在内存中 从底层来看,数组元素可以存放引用类型,数组也是引用类型的一种.也就是说,在数组元素的内部还可以包含数组(如int[][] numbers = new int[length][]),即二维数组可当作一维数组(数组长度为length)来处理. 了解数组和普通引用对象在内存中的区别看这里:数组和普通对象的引用变量有什么区别 由此我们得出结论: 任何多维数组(维度为n,n>1)都可以当

Java千百问_06数据结构(016)_引用类型数组在内存中如何储存

点击进入_更多_Java千百问 1.存放基本类型数组在内存中如何储存 java的数组中可以存放引用类型. 存放引用类型的内存分布相比存放基本类型相对复杂.来看一段存储基本类型的程序: 了解什么是数组看这里:java中的数组是什么 了解数组在内存中的储存看这里:java数组如何存储在内存中 public class TestPrimitiveArray { public static void main(String[] args) { //1.定义数组 int[] numbers; //2.分配

Java千百问_06数据结构(017)_什么是二维数组

点击进入_更多_Java千百问 1.二维数组如何定义 Java语言中,多维数组被看作数组的数组. 了解一维数组看这里:java中的数组是什么 定义方式和一维数组类似,如下: type arrayName[ ][ ]: type [ ][ ]arrayName; 2.二维数组如何初始化 二维数组初始化和一维数组一样,分为静态初始化和动态初始化 静态初始化 Java语言中,由于把二维数组看作是数组的数组,数组空间不是连续分配的,所以不要求二维数组每一维的大小相同.初始化方式如下: int intAr

Java千百问_06数据结构(012)_如何遍历数组

点击进入_更多_Java千百问 1.如何遍历数组 我们在处理数组时,经常使用for循环或foreach循环进行遍历,因为数组中的所有元素类型相同并且数组的大小是已知的. 了解什么是数组看这里:java中的数组是什么 了解for循环看这里:java中如何循环执行 使用for循环遍历 public class TestArray { public static void main(String[] args) { double[] myList = {1.9, 2.9, 3.4, 3.5}; //

Java千百问_06数据结构(015)_数组和普通对象的引用变量有什么区别

点击进入_更多_Java千百问 1.数组和普通对象的引用变量有什么区别 了解什么是数组看这里:java中的数组是什么 对于java的数组来说,只有类型兼容(即属于同一数据类型体系且遵守优先级由低到高原则),才能将数组引用传递给另一数组引用,但仍然不能改变数组长度(仅仅只是调整数组引用指针的指向). 了解数组传递看这里:数组如何传递 public class TestArrayLength { public static void main(String[] args) { int[] numbe

Java千百问_06数据结构(013)_数组如何传递

点击进入_更多_Java千百问 1.数组如何传递 在java中,我们可以将数组作为参数传递给方法,方式同传递基本类型参数一致. 了解什么是数组看这里:java中的数组是什么 了解循环数组便利看这里:如何遍历数组 例子: public static void printArray(int[] array) { for (int i = 0; i < array.length; i++) { System.out.print(array[i] + " "); } } 可以通过传递数组

Java千百问_06数据结构(008)_null属于哪种数据类型

点击进入_更多_Java千百问 1.null属于哪种数据类型 首先,在java中,null本身不是对象,也不是Objcet的实例.那么他属于哪种数据类型呢? 了解数据类型看这里:java中数据类型是什么 java基本数据类型看这里:[java有哪8种基本数据类型3 具体看下面这个例子: if (null instanceof java.lang.Object) { System.out.println("null属于java.lang.Object类型"); } else { Syst

Java千百问_06数据结构(023)_基本数据类型在内存中如何存放

点击进入_更多_Java千百问 1.基本数据类型在内存中如何存放 了解基本数据类型看这里:java有哪8种基本数据类型 对于java中的8种基本数据类型,可以通过如下方式赋值给变量赋值. int a = 3; float b = 4.0f; a = a + 2; 8中基本数据是将具体值直接存放在栈中,在发生变更时,将具体值替换为新的值.具体如下: 了解java如何管理内存看这里:jvm是如何管理内存的 了解java堆和栈的区别看这里:java堆和栈有什么区别 对于基本数据类型,并没有基本数据池的

Java千百问_06数据结构(022)_String在内存中如何存放

点击进入_更多_Java千百问 1.String在内存中如何存放 了解String是什么看这里:String是什么 String是一个特殊的包装类数据. 可以用两种的形式来创建: String str = new String( "abc" ); String str = "abc" ; 了解java如何管理内存看这里:jvm是如何管理内存的 了解java堆和栈的区别看这里:java堆和栈有什么区别 第一种是用new()来新建对象的,它会在存放于堆中,每调用一次就会