一维数组创建的几种方法 您所在的位置:网站首页 java定义数组的方式有几种 一维数组创建的几种方法

一维数组创建的几种方法

2024-01-05 12:22| 来源: 网络整理| 查看: 265

数组可以说是对于每种语言学习中的最基础的数据结构之一,几乎是在所有项目中都会涉及到数组的使用,接下来就详细介绍一下数组的声明、创建和初始化以及实例代码解析,以Java语言描述

声明 数据类型 数组名称[] 或 数据类型[] 数组名称 //首选的方法

这部分来说俩种声明方式的效果是相同的,但是推荐首选第一种方法来声明,因为第一种方法更加直观,更具有可读性,可以通过声明看出是一种引用类型,而不是普通的数据类型 具体整型数组声明如下:

声明int型数组 int[] arrNum; int arrNum[];

这里的命名看个人喜好,不管怎样要有自己的规范,我个人一般是加前缀arr 另外需要注意的是,Java语言中声明数组时不能指定其长度,因为数组是一种引用型变量,也就是说在数组定义时实质上是定义了一个引用变量(或者说是一个指针),而此时这个引用变量还没有指向任何有效的内存,并且这时候在内存中还没有开辟任何内存空间,所以不能指定长度. 错误定义

//int[5] arrNum; //int arrNum[5];

那么这个时候学过C++的可能会问,为什么在C++中这样定义数组是合法的呢?而且是这样定义以后就可以使用,Java却需要创建、初始化以后才可以使用? 因为C和C++中的数组就是内存块,而Java中出于安全性考虑,定义的数组是对象,数组保存的仅仅是对象的引用,而不是对象本身,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。

创建

Java使用new关键字创建数组,如果数组创建没有初始化,必须指定数组的大小

arrNum = new int[5];//正确 arrNum = new int[]{0,1,2,3,4};//正确 //arrNum = new int[];//错误,未初始化也未指定数组的大小

案例一:

public class ArrayDemo { public static void main(String []args){ int [] arrNum; int [] arrNum1; int [] arrNum2 = new int[5]; arrNum = new int[5]; arrNum1 = new int[]{1,2,3,4,5}; System.out.println(arrNum[0]); System.out.println(arrNum1[0]); System.out.println(arrNum2[0]); } }

可以看到以上这三种方法创建数组都是正确的

初始化

其实在上面的案例中已经涉及到了数组的初始化,数组的初始化分为静态初始化、动态初始化以及默认初始化 动态初始化就是在创建过程中只是声明数组的大小,而由系统为数组分配值

int [] arrNum; arrNum = new int[5]; int [] arrNum = new int[5];//简化方式

静态初始化 就是由程序员显式的指定每个数组元素的值

int [] arrNum1; arrNum1 = new int[]{1,2,3,4,5}; int[] arrNum1 = {1,2,3,4,5};//简化方式

这里对于静态初始化的方式,推荐使用第一种方式,不推荐简化方式。

堆栈分析

以上数组创建的方式,其实归根到底总共是俩种方式: 方式一:

int[] arrNum; arrNum = new int[5];

对于这种方式,实质上第一句是创建了一个引用对象,可以认为是在栈内存中开辟了一个对象,而为这个对象创建了一个空指针,这时候如果没有第二句,那么编译器就会报错空指向异常,第二句的作用就是在堆内存中开辟出大小为5的内存空间 方式二:

int[] arrNum = new int[5];

实际上这种方法就是省去了第一步,也可以说是将对象在堆栈中开辟的过程合为了一个过程

引用传递

既然前面提到了数组实际上是一种引用类型,那么数组是一定可以发生引用传递的,什么叫引用传递?实质就是同一块堆内存空间能够被不同的栈空间所访问,那么数组的引用传递是怎么实现? 案例二:

public class ArrayDemo { public static void main(String[] args) { int[] arrNum; arrNum = new int[]{1, 2, 3, 4, 5}; int[] temp = arrNum; temp[0] = 10; for (int i = 0;i < arrNum.length; i++){ System.out.println(arrNum[i]); } } } 输出: 10 2 3 4 5 Process finished with exit code 0

这个时候对于语句int[] temp = arrNum; 执行的就是将temp数组在栈内存空间中开开辟的地址指向和data数组同样的堆内存地址,而这个时候改变temp[0]的值实质上同时改变了arrNum[0]的值。

总结

以上就是详细的学习了数组的一些相关操作,但是这只是为了掌握数据的底层一些设计,在实际工作中,不管动态还是静态的方法一般都不会用到,因为数组有一个最大的缺点就是数组的长度不能改变,实际过程中一般都是通过传值或者别的方式进行动态的生成数组,而不是提前指定数组的大小。

Java创建数组的几种方式 数组在C++和java中的区别



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有