定义一个整形数组_java 基础之数组

论坛 期权论坛 脚本     
已经匿名di用户   2022-7-2 22:15   2546   0

在聊集合的知识之前我们先看下数组,其实数组也是归纳到集合中的。

数组的定义

java数组就是线性表的定义,分配一段连续的空间用于存放数据。数组是比较简单的访问比较快。

数组的分类

一维数组

int [] a= new int[10] 分配连续的可存放元素个数为10的空间,

public class main{

public static void main(String[] args){

int [] array = new int[10];

array[1]=222;

array[2]=333;

System.out.println(array.length);

ArrayList<Integer> list = new ArrayList<>();

list.add(123);

list.add(22);

System.out.println(list);

}

}

看了一维的之后我们再看看多维数组

多维数组

以二维数组为例,二维数组的实质:数组的数组。数组中的每一个元素仍然是个数组。

逻辑上可看做二维,其实并不是二维的

public void test(){

// 这是个3行的但是列未定义。

int[][] array= new int[3][];

array[0] = new int[5]; // 第0行有5列 ,创建有5个整形变量的数组

arry[1] = new int[4];

array[2]= new int[3];

}

数组的初始化

Java语言是典型的静态语言,因此Java的数组是静态的,即当数组被初始化之后,该数组的长度是不可变的。Java程序中的数组必须经初始化才可使用。所谓初始化,就是为数组对象的元素分配内存空间,并为每个数组元素指定初始值。数组的初始化有以下两种方式。

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


■ 动态初始化:初始化时程序员只指定数组长度,由系统为数组元素分配初始值。不管采用哪种方式初始化Java数组,一旦初始化完成,该数组的长度就不可改变,Java语言允许通过数组的length属性来访问数组的长度。

指定初始值时,系统将按如下规则分配初始值。

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

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

■数组元素的类型是基本类型中的字符类型(char),则数组元素的值是'\u0026#39;。

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

■数组元素的类型是引用类型(类、接口和数组),则数组元素的值是null。注意不要同时使用静态初始化和动态初始化。也就是说,不要在进行数组初始化时,既指定数组的长度,也为每个数组元素分配初始值。

01f19a0b7785f5cead3de03915f1fff8.gif

Java的数组是静态的,一旦为数组初始化完成,数组元素的内存空间分配即结束,程序只能改变数组元素的值,而无法改变数组的长度。需要指出的是,Java的数组变量是一种引用类型的变量,数组变量并不是数组本身,它只是指向堆内存中的数组对象。因此,可以改变一个数组变量所引用的数组,这样可以造成数组长度可变的假象使用Java数组之前必须先初始化数组,也就是为数组元素分配内存空间,并指定初始值。实际上,如果真正掌握了Java数组在内存中分配机制,那么完全可以换一个方式来初始化数组,或者说,数组无需经过初始化。

始终记住:Java的数组变量是引用类型的变量,它并不是数组对象本身,只要让数组变量指向有效的数组对象,程序中即可使用该数组变量

比如 :

public class ArrayTest3

{

public static void main(String[] args)

{

//定义并初始化nums数组

int[] nums=new int[]{3, 5, 20, 12};

//定义一个prices数组变量

int[] prices;

//让prices数组指向nums所引用的数组

prices = nums;

for (int i=0 ; i < prices.length ; i++)

{

System.out.println(prices[i]);

}

//将prices数组的第3个元素赋值为34

prices[2]=34;

//访问nums数组的第3个元素,将看到输出34

System.out.println("nums数组的第3个元素的值是:"+nums[2]);

}

}

从图1

常常说使用Java数组之前必须先进行初始化,可是现在prices变量却无需初始化,这不是互相矛盾吗?其实一点都都不矛盾。

这个例子最重要的一点指出了prices数组指向nums所引用的数组。内存模型如图所示

f23c974dcc7c9779f8b3c31b19625a47.png

关键是大部分时候,我们把数组变量和数组对象搞混了,数组变量只是一个引用变量(有点类似于C语言里的指针),通常存放在栈内存中(也可被放入堆内存中的);而数组对象就是保存在堆内存中的连续内存空间。对数组执行初始化,其实并不是对数组变量执行初始化,而是要对数组对象执行初始化—也就是为该数组对象分配一块连续的内存空间,这块连续内存空间的长度就是数组的长度。虽然上面程序中的prices变量看似没有经过初始化,但执行prices=nums;就会让prices变量直接指向一个已经执行初始化的数组。对于数组变量来说,它并不需要进行所谓的初始化,只要让数组变量指向一个有效的数组对象,程序即可正常使用该数组变量。

好了,关于数组的增加删除修改,都是通过数组的遍历进行实现的,我在这里就不再多介绍了,在下面我们可以自己尝试一下。

这就是今天要讲的数组的操作。

4afe27967e2c35e9b2cf14033027b4d0.gif

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP