Java中的数组

1.数组的概念

  • 数组概念: 数组就是用于存储数据的长度固定的容器,保证多个数据的数据类型要一致。

百度百科中对数组的定义:

所谓数组(array),就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,以便统一管理他们,然后用编号区分他们,这个名字称为数组名,编号称为下标或索引(index)。组成数组的各个变量称为数组的元素(element)。数组中元素的个数称为数组的长度(length)。

在这里插入图片描述

数组的特点:

  • 数组的长度一旦确定就不能修改
  • 创建数组时会在内存中开辟一整块连续的空间。
  • 存取元素的速度快,因为可以通过[下标],直接定位到任意一个元素。

2.数组的初始化

2.1 静态初始化

//必须在一个语句中完成,不能分开两个语句写
格式1: 数据类型[] 数组名 = {元素1,元素2,元素3,...};//定义存储1,2,3,4,5整数的数组
int [] arr  = {1,2,3,4,5};格式2:  数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3,...};int[] arr = new int[]{1,2,3,4,5}数据类型[] 数组名;
数组名 = new 数据类型[]{元素1,元素2,元素3,...};
int[] arr;
arr = new int[]{1,2,3,4,5}

2.2 动态初始化

  • 格式

    数据类型[] 数组名 = new 数据类型[长度];
    int[] arr = new int[5];数组类型[] 数组名;
    数组名 = new 数据类型[长度];
    int[] arr;
    arr = new int[5];
    

3.数组元素的访问

  • 索引: 每一个存储到数组的元素,都会自动的拥有一个编号,从0开始,这个自动编号称为数组索引(index),可以通过数组的索引访问到数组中的元素。

  • 索引范围:[0, 数组的长度-1]

  • 格式:

    数组名[索引]
    
  • 索引访问数组中的元素:

    • 数组名[索引]=数值,为数组中的元素赋值
    • 变量=数组名[索引],获取出数组中的元素
    public static void main(String[] args) {//定义存储int类型数组,赋值元素1,2,3,4,5,6int[] arr = {1, 2, 3, 4, 5, 6};//为0索引元素赋值为6arr[0] = 6;//获取索引0上的元素int i = arr[0];System.out.println(i);//直接输出数组0索引元素System.out.println(arr[0]);
    }
    

4.数组的遍历

  • 数组的长度属性: 每个数组都具有固定的长度,Java中赋予了数组的一个属性,可以获取到数组的长度,语句为:数组名.length ,属性length的执行结果是数组的长度,int类型结果。可推断出,数组最大索引值为数组名.length-1

  • 数组遍历: 将数组中的每个元素分别获取出来。遍历也是数组操作中的基石。

    public static void main(String[] args) {//定义存储int类型数组,赋值元素1,2,3,4,5,6int[] arr = {1, 2, 3, 4, 5, 6};//打印数组的属性,输出结果是6System.out.println("数组的长度:" + arr.length);//遍历输出数组中的每个元素System.out.println("数组的元素有:");for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]);}
    }
    

5.数组元素的默认值

数组元素的默认值:

数据类型元素默认初始值
byte0
short0
int0
long0L
float0.0F
double0.0
char0或者’\u0000’(表现为空)
booleanfalse
引用类型null

6.数组的内存图

6.1 内存概述

  内存是计算机中重要的部件之一,它是与CPU进行沟通的桥梁。其作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。计算机在运行中,CPU就会把需要运算的数据调到内存中进行运算,当运算完成后CPU再将结果传送出来。我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的,必须放进内存中才能运行,运行完毕后会清空内存。

Java虚拟机要运行程序,必须要对内存进行空间的分配和管理。

6.2 Java虚拟机内存划分

在这里插入图片描述

区域作用
程序计数器程序计数器是CPU中的寄存器,它包含每一个线程下一条要执行的指令的地址
本地方法栈当程序中调用了native的本地方法时,本地方法执行期间的内存区域
方法区存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
堆内存存储对象(包括数组对象),new来创建的,都存储在堆内存。
虚拟机栈存储正在执行的每个Java方法的局部变量表等。局部变量表存放了编译器可知长度的各种基本数据类型、对象引用,方法执行完,自动释放。

6.3 数组在内存中的存储

1.一个数组的内存图
public static void main(String[] args) {int[] arr = new int[3];System.out.println(arr);//[I@66cd51c3
}

程序执行流程:

  1. main方法进入方法栈执行
  2. 创建数组,JVN会在对堆内存中开辟空间,存储数组
  3. 数组在内存中会有自己的存储地址,以十六进制数表示
  4. 数组中有三个元素,默认值为0
  5. JVM将数组的内存首地址赋值给引用类型变量arr
  6. 变量arr保存的是数组内存中的地址,而不是一个具体数值
    在这里插入图片描述

Q1:打印arr为什么是[I@66cd51c3,它是数组的地址吗?

答: 不是数组的地址

Q2:arr中存储的是数组对象的首地址吗?

答:arr中存储的是数组的首地址,但是因为数组是引用数据类型,打印arr时,会自动调用arr数组对象的toString()方法,默认该方法实现的是对象类型名@该对象的hashCode()值的十六进制值。

2.两个数组的内存图
public static void main(String[] args) {int[] arr = new int[3];int[] arr2 = new int[2];System.out.println(arr);System.out.println(arr2);
}

在这里插入图片描述

public static void main(String[] args) {// 定义数组,存储3个元素int[] arr = new int[3];//数组索引进行赋值arr[0] = 5;arr[1] = 6;arr[2] = 7;//输出3个索引上的元素值System.out.println(arr[0]);System.out.println(arr[1]);System.out.println(arr[2]);//定义数组变量arr2,将arr的地址赋值给arr2int[] arr2 = arr;arr2[1] = 9;System.out.println(arr[1]);
}

在这里插入图片描述

7.总结

  • 数组的定义:相同数据类型、固定长度
  • 数组的初始化:静态初始化、动态初始化
  • 数组元素的访问、数组的长度、数组的遍历

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

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

相关文章

Redis核心数据结构实战与高性能解析

目录 一、安装Redis 二、Redis线程与高性能 2.1 Redis是单线程么&#xff1f; 2.2 Redis读写是单线程为何这么快&#xff1f; 2.3 Redis如何处理并发操作命令&#xff1f; 三、核心数据结构实战 3.1 字符串常用操作实战 SET 存入键值对 SETNX SETEX MSET 批量存入键…

华为云云耀云服务器L实例评测|华为云上安装kafka

文章目录 华为云云耀云服务器L实例评测&#xff5c;华为云上安装kafka一、kafka介绍二、华为云主机准备三、kafka安装1. 安装什么版本java2. 安装zookeeper服务3. 使用systemctl 管理启动ZooKeeper服务4. 修改kafka配置5. 使用systemctl 管理启动kafka服务6. 创建一个测试 topi…

Vue路由及Node.js环境搭建

目录 一.Vue路由 1.1 定义 1.2 应用领域 1.3 代码展示 二、Node.js 2.1 定义 2.2 特点 三.Node.js安装与配置 3.1.下载 3.2.安装 3.3.环境搭建 好啦今天到这了&#xff0c;希望帮到你&#xff01;&#xff01;&#xff01; 一.Vue路由 1.1 定义 Vue路由是指使用Vue Router…

大数据-hadoop

1.hadoop介绍 1.1 起源 1.2 版本 1.3生产环境版本选择 Hadoop三大发行版本:Apache、Cloudera、Hortonworks Apache版本最原始的版本 Cloudera在大型互联网企业中用的较多 Hortonworks文档较好 1.4架构 hadoop由三个模块组成 分布式存储HDFS 分布式计算MapReduce 资源调度引擎Y…

单片机上软字库换32进制存储,空间占用少20%

在之前的单片机字库建立的推送中: https://blog.csdn.net/platform/article/details/130742775&#xff0c; 存储了GB2312字符集对应的软字库文件&#xff0c;在16*16的编码下总字库的507KB&#xff0c;后来把字体切换成了12*12&#xff0c;软字库缩减到了301KB。当然这里面对…

Android---底部弹窗之BottomSheetDialog

BottomSheetDialog 是Android开发中的一个弹出式对话框&#xff0c;它从屏幕底部弹出并覆盖部分主界面。 1. BottomSheetDialog的使用 // 参数2&#xff1a;设置BottomSheetDialog的主题样式&#xff1b;将背景设置为transparent&#xff0c;这样我们写的shape_bottom_sheet_…

20230918使用ffmpeg将mka的音频转为AAC编码以便PR2023来识别

20230918使用ffmpeg将mka的音频转为AAC编码以便PR2023来识别 2023/9/18 20:58 ffmpeg -i 1.mka -acodec aac 1.mp4 ffmpeg -i 1.mka -vn -c:a aac 2.aac ffmpeg -i 1.mka -vn -c:a aac 2.MP4 ffmpeg mka 转 aacmp4 https://avmedia.0voice.com/?id42526 用ffmpeg将mka格式转化…

华为云云耀云服务器L实例评测 | Docker 部署 Reids容器

文章目录 一、使用Docker部署的好处二、Docker 与 Kubernetes 对比三、云耀云服务器L实例 Docker 部署 Redis四、可视化工具连接Redis⛵小结 一、使用Docker部署的好处 Docker的好处在于&#xff1a;在不同实例上运行相同的容器 Docker的五大优点&#xff1a; 持续部署与测试…

AI绘图提示词Stable Diffusion Prompt 笔记

基础 提示词分为正向提示词&#xff08;positive prompt&#xff09;和反向提示词&#xff08;negative prompt&#xff09;&#xff0c;用来告诉AI哪些需要&#xff0c;哪些不需要词缀的权重默认值都是1&#xff0c;从左到右依次减弱&#xff0c;权重会影响画面生成结果。AI …

Spring Boot集成Redis实现数据缓存

🌿欢迎来到@衍生星球的CSDN博文🌿 🍁本文主要学习Spring Boot集成Redis实现数据缓存 🍁 🌱我是衍生星球,一个从事集成开发的打工人🌱 ⭐️喜欢的朋友可以关注一下🫰🫰🫰,下次更新不迷路⭐️💠作为一名热衷于分享知识的程序员,我乐于在CSDN上与广大开发者…

C++标准模板库STL——list的使用及其模拟实现

1.list的介绍 list的文档介绍 1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。 2. list的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过指针指向 其前一个…

【C++】开源:单元测试框架gtest配置使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍单元测试框架gtest配置使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff…

服务器性能测试监控平台export+prometheus(普罗米修斯)+grafana搭建

1. export 数据采集工具 简介&#xff1a; export是prometheus是的数据采集组件的总称&#xff0c;它可以将采集到的数据转为prometheus支持的格式 node_export: 用来监控服务器硬件资源的采集器&#xff0c;端口号为9100mysql_export: 用来监控mysql数据库资源的采集器&…

性能测试 —— Tomcat监控与调优:Jconsole监控

JConsole的图形用户界面是一个符合Java管理扩展(JMX)规范的监测工具&#xff0c;JConsole使用Java虚拟机(Java VM)&#xff0c;提供在Java平台上运行的应用程序的性能和资源消耗的信息。在Java平台&#xff0c;标准版(Java SE平台)6&#xff0c;JConsole的已经更新到目前的外观…

前端新轮子Nue,号称替代Vue、React和Svelte

新的简约前端开发工具集Nue.js 于周三发布。在 Hacker News 上介绍它时&#xff0c;前端开发者和Nue.js 的创作者Tero Piirainen表示&#xff0c;它是 React、Vue、Next.js、Vite、Svelte 和 Astro 的替代品。他在 Nue.js的 FAQ 中进一步解释说&#xff0c;它是为网站和响应式用…

力扣刷题-链表-两两交换链表中的节点

24.两两交换链表中的节点 给定一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后的链表。你不能只是单纯的改变节点内部的值&#xff0c;而是需要实际的进行节点交换。 解题思路 采用正常模拟的方法。 建议使用虚拟头结点&#xff0c;这样会方便很多&am…

【python爬虫】爬虫所需要的爬虫代理ip是什么?

目录 前言 一、什么是爬虫代理 IP 二、代理 IP 的分类 1.透明代理 2.匿名代理 3.高匿代理 三、如何获取代理 IP 1.免费代理网站 2.付费代理服务 四、如何使用代理 IP 1.使用 requests 库 2.使用 scrapy 库 五、代理 IP 的注意事项 1.代理 IP 可能存在不稳定性 2…

R语言贝叶斯非参数模型:密度估计、非参数化随机效应META分析心肌梗死数据...

全文链接&#xff1a;http://tecdat.cn/?p23785 最近&#xff0c;我们使用贝叶斯非参数&#xff08;BNP&#xff09;混合模型进行马尔科夫链蒙特卡洛&#xff08;MCMC&#xff09;推断&#xff08;点击文末“阅读原文”获取完整代码数据&#xff09;。 概述 相关视频 在这篇文…

坐标休斯顿,TDengine 受邀参与第九届石油天然气数字化大会

美国中部时间 9 月 14 日至 15 日&#xff0c;第九届石油天然气数字化大会在美国德克萨斯州-休斯顿-希尔顿美洲酒店举办。本次大会汇聚了数百名全球石油天然气技术高管及众多极具创新性的数据技术方案商&#xff0c;组织了上百场硬核演讲&#xff0c;技术专家与行业从业者共聚一…

12:STM32---RTC实时时钟

目录 一:时间相关 1:Unix时间戳 2: UTC/GMT 3:时间戳转化 二:BKP 1:简历 2:基本结构 三: RTC 1:简历 2: 框图 3:RTC基本结构 4:RTC操作注意 四:案例 A:读写备份寄存器 1:连接图 2: 步骤 3: 代码 B:实时时钟 1:连接图 2:函数介绍 3:代码 一:时间相关 1:Un…