【JavaSE】(3)数组

目录

一、数组的定义和初始化

1. 什么是数组

2. 数组的定义

3. 数组的初始化

4. 操作数组的工具包

二、数组的使用

三、引用类型

1. JVM内存分布

2. 引用变量

3. 默认值 null

四、二维数组

1. 二维数组的定义和初始化

2. 不规则的二维数组


一、数组的定义和初始化

1. 什么是数组

        数组就是同一类型、所占内存空间连续的数据的集合。

2. 数组的定义

int[] array = new int[10]; // 整型数组

3. 数组的初始化

        动态初始化:指定元素个数。(可分两步)

int[] array = new int[3];// 分两步
int[] array;
array = new int[];

        静态初始化:根据初始化的内容确定元素个数。

int[] array = new int[]{1, 2, 3}; // 形式1// 分两步
int[] array;
array = new int[]{1, 2, 3};int[] array = {1, 2, 3}; // 形式2// 不可分两步
int[] array;        ×
array = {1, 2, 3};  ×

        注意,静态初始化可以省略掉 new int[]。省略的静态初始化不可分两步

未初始化的数组的元素默认值
类型默认值
byte0
short0
int0
long0
float0.0f
double0.0
char/u0000
booleanfalse
引用类型null

4. 操作数组的工具包

        Arrays,比如:

Arrays.toString(array) :将数组转字符串。

Arrays.binarySearch(array, value) : 二分查找。

Arrays.copyOf(array, length) : 拷贝指定长度(从头开始),大于被拷贝数组长度就扩容为元素类型对应的默认值。

System.arraycopy 看不到源码,是用 C/C++ 写的系统底层代码,效率高。 

Arrays.copyOfRange(array, start, end) : 拷贝指定范围[start, end)。

二、数组的使用

        for-each,更方便遍历数组的语法形式:

int[] array = new int[]{1, 2, 3};for(int x: array){System.out.println(x);
}

三、引用类型

        数组属于引用类型。

1. JVM内存分布

        为了方便管理程序运行时的数据(使用时间长短不一),内存分区。这里主要讲本地方法栈(Native Method Stack)、虚拟机栈(JVM Stack)和堆(Heap)。

本地方法栈:JVM 的底层代码由 C/C++ 实现,这些方法称为本地方法,在本地方法中的局部变量存放在本地方法栈。

虚拟机栈java 程序中方法的局部变量存放在虚拟机栈,局部变量会随方法的结束而被回收内存。

:创建的对象都存放在堆区,只有对象对应的引用变量被回收,对象的内存才会被回收。否则,程序结束才回收。

2. 引用变量

        在方法中,基本数据类型变量、引用变量存放在虚拟机栈中,只不过,基本数据类型变量存放的内容是数据本身;而引用变量的内容是对象的地址。对象存放在堆中。

示例代码:

int[] array = new int[]{1, 2, 3};

数据在内存中的存储图示:

        所以将引用变量作为实参传给方法,传的是对象的地址,能通过形参修改实参指向的对象

3. 默认值 null

        引用变量未初始化,默认值为 null。C 语言中 NULL表示内存中的 0 地址(无效的内存地址),而 Java 中 null 表示空引用,都不可读写

四、二维数组

1. 二维数组的定义和初始化

// 动态
int[][] arr = new int[2][3];
// 静态
int[][] arr = new int[][]{{1, 2, 3}, {4, 5, 6}};
int[][] arr = {{1, 2, 3}, {4, 5, 6}}; // 省略版静态

2. 不规则的二维数组

        C语言中的二维数组可省略行,不可省略列。Java相反,可省略列,不可省略行。二维数组实际上就是元素为一维数组的一维数组。

        示例代码:

int[][] arr = new int[2][]; // 不可省略行
arr[0] = new int[]{1, 2, 3};
arr[1] = new int[]{4, 5};

        在内存中的图示:引用变量array存的二维数组对象的地址,array[0]、array[1]也是引用变量,存的一维数组对象的地址。

遍历行:array.length
遍历第一行的列:array[0].length

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

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

相关文章

uniapp—android原生插件开发(3Android真机调试)

本篇文章从实战角度出发,将UniApp集成新大陆PDA设备RFID的全过程分为四部曲,涵盖环境搭建、插件开发、AAR打包、项目引入和功能调试。通过这份教程,轻松应对安卓原生插件开发与打包需求! 一、打包uniapp资源包: 打包…

【 AI写作鹅-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造…

esp32学习:利用虫洞ESP32开发板,快速实现无线图传

我们的虫洞开发板,能够完美运行esp who AI代码,所以实现无线图传那是非常容易的,我们先看看examples目录: 里面有比较多的web例程,在这些例程下,稍作修改,就可以快速实现我的图传无线功能&#…

Docker网络概述

1. Docker 网络概述 1.1 网络组件 Docker网络的核心组件包括网络驱动程序、网络、容器以及IP地址管理(IPAM)。这些组件共同工作,为容器提供网络连接和通信能力。 网络驱动程序:Docker支持多种网络驱动程序,每种驱动程…

RK3568平台开发系列讲解(设备树篇)设备树中CPU描述

🚀返回专栏总目录 文章目录 一、CPU节点1.1、节点结构:1.2、处理器属性:1.3、 处理器拓扑关系:二、cpu-map、 socket、 cluster 节点三、core、 thread 节点沉淀、分享、成长,让自己和他人都能有所收获!😄 一、CPU节点 设备树的 cpus 节点是用于描述系统中的处理器的一…

element plus中修改el-table的样式

文章目录 前情提要相关环境package.jsonvue代码结果 方式一直接看代码 方式二直接看代码 前情提要 因为项目中用到el-table的时候,需要将el-table表格的样式进行修改,将整个表格的背景颜色从白色变成透明,使得表格变得透明之后,展…

【启程Golang之旅】一站式理解Go语言中的gRPC

在本文中将深入探讨如何使用Go语言构建基于gRPC的高效服务通信,无论你是刚刚接触gRPC还是已经有一定基础的开发者,这篇文章都将带你从理论到实践,全面理解如何借助Go和gRPC提升应用程序的性能与可维护性。 目录 初识gRPC gRPC基本使用 初识…

Ubuntu22.04安装DataEase

看到DataEase的驾驶舱,感觉比PowerBI要好用一点,于是搭建起来玩玩。Dataease推荐的操作系统是Ubuntu22.04/Centos 7。 下载了Ubuntu22.04和DataEase 最新版本的离线安装包 一.安装ubuntu22.04 在安装的时候,没有顺手设置IP地址信息&#xff…

IDEA加载通义灵码插件及使用指南

安装通义灵码插件 登录通义灵码IDE插件 下载登录参考教程 https://help.aliyun.com/zh/lingma/user-guide/download-the-installation-guide 本地工程和企业知识库准备 请下载本地工程和知识库压缩包,并在本地解压缩,其中包含demoProject和知识库文件…

第二届开放原子大赛-开源工业软件算法集成大赛即将启动!

第二届开放原子大赛-开源工业软件算法集成大赛作为开放原子开源基金会组织举办的开源技术领域专业赛事,聚焦开源底座框架平台建设,通过组件化集成的开发模式,丰富平台功能模块,拓展其应用场景,以此促进工业软件生态的繁…

帮你快速理解并巧记设计模式

经常因为记不住或不能理解设计模式而苦恼的童鞋们注意了,闲暇之余总结了常用的22中设计模式,并一一举例,帮助大家快速理解、牢记,如有不对的地方,欢迎大家指正哈 创建型模式 单例模式(Singleton Pattern&…

甘肃高校大数据实验室建设案例分享

随着信息技术的快速发展,大数据技术已成为推动经济社会发展的重要引擎。甘肃省高度重视教育信息化建设,并积极支持省内高校建立大数据相关实验室,以促进学科交叉融合及创新人才培养。在此背景下,泰迪携手多所甘肃高校共同打造了一…

成都睿明智科技有限公司共赴抖音电商蓝海

在这个短视频风起云涌的时代,抖音作为现象级的社交媒体平台,不仅改变了人们的娱乐方式,更悄然间重塑了电商行业的格局。在这片充满机遇与挑战的蓝海中,成都睿明智科技有限公司凭借其敏锐的市场洞察力和专业的服务能力,…

【前端】JavaScript 方法速查大全-对象(二)

🔥 前言 在现代Web开发中,JavaScript已经成为不可或缺的编程语言。无论是前端开发还是后端服务,JavaScript都扮演着重要角色。为了帮助开发者更高效地使用JavaScript,本文将为您提供一个全面、系统的JavaScript方法参考&#xff…

右旋圆极化散射后的stocks矢量 与T3矩阵的关系

T3矩阵如下 斯托克斯与T3的关系如下。 斯托克斯与T3均没有平均处理,即斯托克斯是完全极化波的(一种琼斯矢量得到),T3是由一个散射矩阵得到,只有一个特征值。

电子电气架构 -- 智能汽车电子电气架构开发关键技术

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所有人的看法和评价都是暂时的,只有自己的经历是伴随一生的,几乎所有的担忧和畏惧,都是来源于自己的想象,只有你真的去做了,才会发现有多快乐。…

Windows下mysql数据库备份策略

Windows下mysql的增量备份和全量备份,并利用schtasks设置定时任务执行bat脚本。 一、备份要求 序号 备份类型 备份频次 备份时间 1 增量备份 每周一-每周六各一次 18:00:00 2 全量备份 每周日一次 18:00:00 二、备份方法 2.1增量备份 2.1.1准备工作…

使用CentOS宝塔面板docker搭建EasyTier内网穿透服务

0. 前言 EasyTier是一个简单、安全、去中心化的内网穿透 VPN 组网方案,部署方便,支持 MacOS/Linux/Windows/FreeBSD/Android平台,而且作者搭建了一个公共服务器,不想折腾自建服务,可以使用默认的公共服务器地址 tcp:/…

Moment.js、Day.js、Miment,日期时间库怎么选?

一直以来,处理时间和日期的JavaScript库,选用的都是Momment.js。它的API清晰简单,使用方便灵巧,功能还特别齐全。 大师兄是Moment.js的重度使用者。凡是遇到时间和日期的操作,就把Moment.js引用上。 直到有天我发现加…

AOSP去特征|AOSP导入android-studio|AOSP导入clion

什么是AOSP 开源性:AOSP的源代码公开,任何人都可以获取和修改,适合想要开发或自定义安卓系统的开发者。 灵活性:AOSP提供了基本的安卓功能,制造商可以基于AOSP开发出自己的定制系统(如三星的One UI、小米的…