Java创建数组、赋值的四种方式,声明+创建+初始化 详解

文章目录

  • 一、创建数组的四种方式
  • 二、详解
  • 三、数组存储的弊端

一、创建数组的四种方式

以int数据类型为例

@Test
public void testNewArray() {//创建数组//法一int[] arr1 = new int[]{1,2,3,4,5};System.out.println(arr1.length + "   " + arr1[2]);   //5   3//Arrays.toString(Object[])  将数组的元素生成字符串,数组的各个元素使用方括号括着 [ ]System.out.println(Arrays.toString(arr1));   //[1, 2, 3, 4, 5]//法二 声明、分配空间并赋值int[] arr2 = {1,2,3,4};System.out.println(arr2.length + "   " + arr2[2]);   //4   3//法三 声明数组时指定元素个数,然后赋值。此时所有的元素值均为0int[] arr3 = new int[4];System.out.println(arr2.length + "   " + arr2[3]);  //4   0//法四 声明数组名、开辟空间、赋值int[] arr4;arr4 = new int[]{0,1,2,3};System.out.println(arr3.length + "   " + arr3[2]);   //4   2//创建多维数组int[][] doubleArr1 = {{1,2,3},{4,5,6},{7,8,9}};int m = 3, n = 4, q = 5;int[][] doubleArr2 = new int[m][n];  //其中n可以省略int[][][] tArr = new int[m][n][q];   //其中n、q可以省略
}

注意:

  • new 数据类型[]{},其中花括号可以省去,但要在[ ]中填写数组的个数;
  • 创建多维数组时 new后面第一个方括号中的元素数量不能省略

二、详解

1、一维数组的声明方式:

type[] arrayName; 或 type arrayName[];

推荐使用第一种格式,因为第一种格式具有更好的可读性,表示type[]是一种引用类型(数组)而不是type类型。建议不要使用第二种方式

int[] intArr;

注:Java语言中声明数组时不能指定其长度(数组中元素的个数),这是因为数组是一种引用类型的变量,因此使用它定义一个变量时,仅仅表示定义了一个引用变量(也就是定一个了一个指针),这个引用变量还未指向任何有效的内存,所以定义数组时不能指定数组的长度。而且由于定义数组仅仅只是定一个引用变量,并未指向任何有效的内存空间,所以还没有内存空间来存储数组元素,因此这个数组也不能使用,只有在数组进行初始化后才可以使用。

2、一维数组的创建

Java中使用关键字new创建数组对象,格式为:数组名 = new 数组元素的类型 [数组元素的个数]

// 创建数组,如果在创建的同时不初始化数组则必须指定其大小
intArr = new int[5];
// 创建数组时,不指定数组大小则必须在创建的同时初始化数组
intArray1 = new int[]{0,1,2};
  • 一旦使用new关键字为数组分配了内存空间,每个内存空间存储的内容就是数组元素的值,也就是数组元素就有了初始值,即使这个内存空间存储的内容是空,这个空也是一个值null。也就是说不可能只分配内容空间而不赋初始值,即使自己在创建数组对象(分配内容空间)时没有指定初始值,系统也会自动为其分配
  • 基础数据类型的包装类,其默认的初始化值均为null,因为基础数据类型的包装类创建的数组属于引用数组(对象数组),对象数组默认的初始化值都是null。

3、一维数组的初始化

数组的初始化分为静态初始化、动态初始化和默认初始化:

  • 静态初始化是数组在初始化时由程序员显式指定每个数组元素的初始值而数组长度由系统决定。
  • 动态初始化是数组在初始化时只指定数组长度,由系统为数组元素分配初始值。
//a、数组静态初始化的语法格式:
arrayName = new type[]{element1,element2,element3...};
// 或者使用简化的语法格式:
arrayName = {element1,element2,element3...}//b、数组动态初始化的语法格式:
arrayName = new type[length]

附:静态初始化时不能指定元素个数,而动态初始化时则必须指定元素个数。静态初始化时数组能够知道元素的个数所以不需要指定,而动态初始化时数组元素个数未知 因此必须指定。

// 静态初始化
int intArray2 [] = new int []{20,21,22};
// 静态初始化简化方式
int intArray3 [] = {30,31,32};// 动态初始化
int [] intArray4 = new int [3];           
// 错误写法:静态初始化不能指定元素个数
// int intErrorArray5[] = new int[3]{50,51,52};
// 错误写法:动态初始化必须指定元素个数
// int intErrorArray6[] = new int[];

注:一维数组这一块记住两点,数组声明的时候是不能指定大小的,也就是说等号左边的中括号中不能包含数字。另外一旦使用new关键字那么肯定在内存中为数组分配了空间,则必然数组有默认值。数组是对象数据类型
注:不要静态初始化和动态初始化同时使用,也就是说不要再进行数组初始化时,既指定数组长度,也为每个数组元素分配初始值。
4、数组进行动态初始化时系统分配初始值的规则

  • 数组元素类型是基本类型中的整数类型(byte、short、int、long),则数组元素的初始化默认值是0
  • 数组元素类型是基本类型中的浮点类型(float、double),则数组元素的值是0.0
  • 数组元素类型是基本类型中的字符类型(char),则数组元素的值是’\u0000’
  • 数组元素类型是基本类型中的布尔类型(boolean),则数组元素的值是false
  • 数组元素类型是基本类型中的引用类型(类、接口、数组),则数组元素的值是null

详情见https://blog.csdn.net/qq_44700578/article/details/136323990

三、数组存储的弊端

  • 一旦初始化,其长度就不可修改,长度不够用、开辟很大的长度会导致空间浪费
  • 数组中提供的方法非常有限。添加、删除、插入等操作 效率很低【为了保证元素的内存地址连续,添加或删除元素时,涉及到前移或者后移】
  • 扩容麻烦,只能新建一个更大的数组,将元素一个一个移进去,效率低
  • 获取数组中实际元素的个数的需求,数组没有现成的属性或方法可用
  • 数组存储数据的特点:有序、可重复。对于无序、不可重复的需求,不能满足

为解决以上问题、灵活运用,提出Java容器的概念

参考https://blog.csdn.net/u014199097/article/details/50551731

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/744678.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux发展史

Linux发展史 ​ Linux是一款较为安全、快速、稳定的操作系统,常用于后端的服务器; 一、计算机的发展史 ​ 1946年世界上第一台计算机埃尼阿克出世,此时的计算机主要是用于军事领域的,如:计算导弹的弹道轨迹。这个时…

《ElementPlus 与 ElementUI 差异集合》el-form-item CSS 属性 display 有变化

差异 element-ui el-form 中,属性display: flex; 导致元素在一排;element-plus el-form 中,属性display: block; 元素按照自己的属性排列; /* element ui */ display: block;/*element plus */ display: flex;如图所示 解决方案…

深度解析:cache的基本概念原理扫盲

引流关键词:缓存,高速缓存,cache, CCI,CMN,CCI-550,CCI-500,DSU,SCU,L1,L2,L3,system cache, Non-cacheable,Cacheable, non-shareable,inner-shareable,outer-shareable, optee、ATF、TF-A、Trustzone、optee3.14、MMU、VMSA、cache、TLB、arm、armv8、armv9、TEE、安全、内存…

【BUG 弹药库】Tortoise git 绿色的勾 ✔ 和 红色的 !突然不见了该如何解决呢?

文章目录 1. 出现的问题描述如下所示:2. 如何解决这个问题呢 ? 1. 出现的问题描述如下所示: 用 TortoiseGit 提交代码的时候,红色的 ! 和 绿色的 ✔ 突然消失了; 2. 如何解决这个问题呢 ? ① 首先按住快…

Windows / Mac应用程序在Linux系统中的兼容性问题 解决方案

Linux系统可以通过多种方式提高与Windows或Mac应用程序的兼容性。这里有一些解决方案 Windows应用程序兼容性解决方案: Wine Wine是一个允许Linux和Unix系统上运行Windows应用程序的兼容层。 它不是模拟器,而是实现了Windows API的开源实现。 许多W…

【OpenGL经验谈01】Vertex 规范最佳实践

目录 一、概述二、缓冲区对象的大小三、格式化VBO数据3.1 最小化顶点状态变化3.2 属性大小3.3 交织3.4 流属性 四、顶点、法线、特坐标五、动态VBO六、顶点布局规范 一、概述 在使用GLSL中,越是深入使用,越觉得难以把控,而且常常是黑屏无Deb…

flink重温笔记(十六): flinkSQL 顶层 API ——实时数据流结合外部系统

Flink学习笔记 前言:今天是学习 flink 的第 16 天啦!学习了 flinkSQL 与企业级常用外部系统结合,主要是解决大数据领域数据计算后,写入到文件,kafka,还是mysql等 sink 的问题,即数据计算完后保存…

华为机试题-士兵的任务 2

题目 士兵在迷宫中执行任务,迷宫中危机重重,他需要在在最短的时间内到达指定的位置。你可以告诉土兵他最少需要多长时间吗? 输入一个 n m 的迷宫中,迷宫中 0 为路,1 为墙,2 为起点,3 为终点,4 为陷阱,6 为炸弹。士兵只能向上下左右四个方向移动,如果路径上为墙,不能移动。已知…

商业模式的深度解析:以四个特点构筑成功之路

商业模式,是企业将产品、服务、信息流、资金流等要素组合在一起,形成独特价值主张,并通过特定的渠道和方式传递给目标市场,从而获取利润的一种系统性设计。一个成功的商业模式,往往具备四个显著特点:重点突…

企业微信如何接入第三方应用?

1.登录企业微信管理后台:https://work.weixin.qq.com/wework_admin​​​​​ 2.点击创建应用; ​​​​​​​ 3. 此时可以看到已经创建好的应用,并且生成应用的唯一id(agentId) 4. 第三方应用申请域名 (举例&…

智慧楼宇物联网建设实施方案(2)

建设方案 楼宇综合管理平台 智慧楼宇物联网应用综合管理系统是对整个物联网系统的集中监控和展示。其主要功能是对各应用子系统的关键监测数据进行数据格式解析并呈现。进而使管理者能够从整体上对整个物联网系统运行状态有个直观的了解。其不同于各专业子系统的管理软件,重…

flstudio教程如何设置成中文 flstudio基础教程 flstudio免费

Fl studio编曲软件总共有英文和中文两种语言供用户选择,对于我们来说,更习惯于使用中文版本的flstudio编曲软件,包括我自己也比较习惯于使用中文版本的flstudio,同时也能提高工作效率。Flstudio编曲软件默认语言是英文&#xff0c…

vue:功能【xlsx】动态行内合并

场景:纯前端导出excel数据,涉及到列合并、行合并。 注)当前数据表头固定,行内数据不固定。以第一列WM为判断条件,相同名字的那几行数据合并单元格。合并的那几行数据,后面的列按需求进行合并。 注&#x…

vue2 elementui 封装一个动态表单复杂组件

封装一个动态表单组件在 Vue 2 和 Element UI 中需要考虑到表单字段的动态添加、删除以及验证等复杂功能。下面是一个简单的例子,展示如何创建一个可以动态添加和删除字段的表单组件。 首先,你需要安装并引入 Element UI: bash 复制 npm in…

CV论文--2024.3.13

1、Sora Generates Videos with Stunning Geometrical Consistency 中文标题:Sora 生成具有惊人几何一致性的视频。 简介:最近发布的 Sora 模型展示了在视频生成领域的出色表现,引发了人们对其模拟真实世界现象能力的激烈讨论。尽管该模型越来越受欢迎&…

如何保证Redis和数据库数据一致性

缓存可以提升性能,减轻数据库压力,在获取这部分好处的同时,它却带来了一些新的问题,缓存和数据库之间的数据一致性问题。 想必大家在工作中只要用了咱们缓存势必就会遇到过此类问题 首先我们来看看一致性: 强一致性…

前端实现生成图片并批量下载,下载成果物是zip包

简介 项目上有个需求,需要根据表单填写一些信息,来生成定制的二维码图片,并且支持批量下载二维码图片。 之前的实现方式是直接后端生成二维码图片,点击下载时后端直接返回一个zip包即可。但是项目经理说后端实现方式每次改个东西…

python基础——列表【创建,下标索引,常见操作方法】

📝前言: 这篇文章主要讲解一下python中常见的数据容器之一——列表 本文主要讲解列表的创建以及我们常用的列表操作方法 🎬个人简介:努力学习ing 📋个人专栏:C语言入门基础以及python入门基础 &#x1f380…

泰迪智能科技3月线上培训计划

有学习意向可到 泰迪智能科技官网 咨询了解

Visual Basic6.0零基础教学(3)—焦点概念和深入学习属性

焦点概念和深入学习属性 文章目录 焦点概念和深入学习属性前言一、什么是焦点(Focus)?焦点的特点 二、窗体属性一、窗体的结构二、窗体的属性三、事件四、方法 一.控件属性一. 标签 Label二.文本框 TextBox2.常用事件 三.命令按钮事件 总结 前言 今天我们来继续学习VB中的属性…