JAVA小知识17:数组,从0基础到掌握

news2024/11/17 15:28:30

        数组,无论在哪种编程语言当中都是最基础,最广泛使用的一种线性表数据结构,这篇文章将从多个角度来从浅入深的讲述数组。

        本文讲述了数组的概念,定义,初始化方法以及如何遍历数组,如何赋值,关于数组越界的问题以及数组在JVM内存中的知识。

一、数组的基本知识 

1.1、数组的概念

  • 数组指的是一种容器,可以用来存储 同种数据类型 的多个值。
  • 数组在存储数据的时候需要结合 隐式转换 来考虑。
  • 数组中若有 整形 和 浮点型 数据,则Boolean类型的数据都存不进去。
  • 数组一旦创建,长度是固定的,无法动态改变

隐式转换

简单数据类型(不包括boolean):
        在Java中整型、实型(常量)、字符型被视为简单数据类型,由低级到高级分别为:
        (byte,short,char) -> int -> long -> float -> double

隐式转换:

        在java中这些简单数据类型从低级转换到高级就是隐式转换,例如如果是double类型的数组,则可以存储所有的简单数据类型,这些比double低级的数据会隐式的转换为double类型存储。

        但是如果是int类型的数组,则 long、float、double都不能存入进去。

1.2、数组的定义 

1.3、数组的初始化  

数组的初始化:就是在内存中,为数组容器开辟空间,并将数据存入容器中的过程。

  • 静态初始化:
    • 完整格式:数据类型[ ]  数组名 = new 数据类型[ ]{元素1,元素2,元素3...}
      范例:int []  array = new int[ ]{1,2,3 }
    • 简化格式:数据类型[ ] 数组名 = {元素1,元素2,元素3}
      范例:int[ ] array = {11,22,33 };
  • 动态初始化:初始化时只指定数组长度,由系统为数组分配初始值。
    • 格式:数据类型[ ] 数组名=new 数据类型[数组长度];
    • 范例:dataType[ ] arrayRefVar = new dataType[arraySize];
  • 区别:
    • 动态初始化:手动指定数组长度,由系统给出默认初始化值,只明确元素个数;
          使用场景:不明确具体数据,推荐使用动态初始化;
    • 静态初始化:手动指定数组元素,系统会根据元素个数,计算出数组的长度;
          使用场景:需求中已经明确了要操作的具体数据,直接静态初始化即可;

数组默认初始化值的规律

整数类型:默认初始化值0
小数类型:默认初始化值0.0
字符类型:默认初始化值 '/u0000' 也就是 空格

布尔类型:默认初始化值 false

引用数据类型:默认初始化值 null

1.4、数组的地址值

        数组的地址值就是数组在内存中的位置。 一般的数组打印之后会呈现以下形式: [D@22927a81

[:    表示当前是一个数组

D:  表示当前数组里面的元素都是double类型的

@::表示一个间隔符号。(固定格式)

22927a81:才是数组真正的地址值,(十六进制)

二、数组的元素访问 

2.1、数组的获取   

        数组的元素是通过索引访问的。数组索引从 0 开始。我们可以将数组理解为一个个整齐排列的单元格,每个单元格里面存放着一个元素。

数组[a,b,c,d,e]
数组[a,b,c,d,e]

        如何获取数组中第一个元素?我们来看看代码。以此类推,我们最多能获得 数组长度-1 个元素。

public static void main(String[] args) {
    String[] arr = {"a", "b", "c", "d", "e"};
    // 获取数组中第一个元素
    String s0 = arr[0];
    System.out.println(s0); // a
}

 2.2、数组的赋值

         通过下面代码我们就能理解如何赋值,但是注意的是:该索引元素赋值后原先元素就不存在了。

public static void main(String[] args) {
    String[] arr = {"a", "b", "c", "d", "e"};
    // 赋值数组中第一个元素
    arr[0]="a1";
    System.out.println(arr[0]); // a1
}

 2.3、数组的遍历

        数组的遍历方法有很多种,我们来展示三种方法:

public static void main(String[] args) {
    String[] arr = {"a", "b", "c", "d", "e"};
    // 方法一:普通for循环
    for(int i = 0; i <arr.length;i++){
        System.out.println(arr[i]);
    }
    // 方法二:增强for循环
    for (String s : arr) {
        System.out.println(s);
    }
    // 方法三、foreach+lamdba表达式
    Arrays.stream(arr).forEach(e-> System.out.println(e));
}

三、数组的常见问题 

 3.1、数组越界问题

        在开发中我们经常能遇见到数组越界问题,这也是一个很常见的问题,他会抛出一个:java.lang.ArrayIndexOutOfBoundsException 异常,这个就是数组越界异常,我们来看看是如何造成的。

        下列代码中,数组arr共有5个元素,那么他的数组长度为5,索引到4,如果查询索引5,则会造成数组越界异常。

四、数组的高级知识 

4.1、数组在JVM中的内存 

 在JAM虚拟机中有如下区域分布:

  • 栈:方法运行时使用的内存,比如main方法运行,进入方法栈中执行
  • 堆:存储对象或者数组,new来创建的,都存储在堆内存
  • 方法区:存储可以运行的class文件
  • 本地方法栈:JVM在使用操作系统功能的时候使用,和我们开发无关
  • 寄存器:给CPU使用,和我们开发无关

一般形式的栈内存与堆内存

定义一个数组的内存图 

        当两个数组指向同一个小空间时,其中一个数组对小空间中的值发生了改变,那么其他数组再次访问的时候都是修改之后的结果了。

        将arr1赋值给arr2,实际上是将地址值引用给了arr2,更改arr2也会影响arr1.

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

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

相关文章

基于WPF技术的换热站智能监控系统03--实现左侧加载动画

1、左侧布局规划 左侧分5行&#xff0c;每行的高度通过height属性来指定&#xff0c;1.2*表示占1.2倍的宽度 2、创建用户控件 在WPF中想要进行个性化处理&#xff0c;主要可以通过三个方面来实现&#xff1a;控件模板&#xff08;控件模板、数据模板、数据容器模板&#xff09…

EDEX-UI这个终端模拟器

eDEX-UI 是一款开源、免费、跨平台的全屏终端模拟器和系统监视器&#xff0c;外观和操作界面极其科幻&#xff0c;灵感来自电影《创战纪》的会议室特效场景。作者倾注了大量心血&#xff0c;使得它不仅拥有酷炫的操作界面&#xff0c;还具备清晰爽脆的音效。 优点&#xff1a; …

【车载AI音视频电脑】4路AHD 130万像素双卡车载录像机

产品主要特点&#xff1a; -支持4路实时高清AHD 720P录像 -SD卡记录数据&#xff08;可支持2张大容量SD卡,最大支持单张256G&#xff09; -支持GPS全球定位, 可选模块 -支持WIFI高速自动下载功能, 可选模块 -内置3/4G模块&#xff0c;实时预览和远程管理&#xff0c; 可选…

打造你的专属扭蛋机:淘宝扭蛋机小程序搭建全攻略

想要在互联网娱乐领域大展拳脚吗&#xff1f;淘宝扭蛋机小程序或许是你的不二选择。本文将为你提供详细的搭建教程&#xff0c;帮助你轻松打造属于自己的扭蛋机小程序。 一、了解扭蛋机小程序的基本原理 在开始搭建之前&#xff0c;我们需要了解扭蛋机小程序的基本原理。扭蛋机…

收藏一些毕业论文技术路线图

*信息来源&#xff1a;xhs 立青Jill 原文链接https://mp.weixin.qq.com/s?__bizMzUyNzczMTI4Mg&mid2247693272&idx3&snf6c8513eaee894c5158dc5c3620bf93c&chksmfa76ace5cd0125f3169b2782c137f6308c6d201d3a845db1be8b397758a1f11e3719524e601b&token18515…

图片转Excel表格:提升数据处理效率的利器

在日常工作和生活中&#xff0c;我们经常遇到各种数据和信息以图片的形式存在。有时&#xff0c;这些数据图片中包含了重要的表格信息&#xff0c;例如财务报告、统计数据或调研结果。为了对这些数据进行进一步的分析和处理&#xff0c;我们需要将其转换为可编辑的电子表格格式…

Android WebSocket长连接的实现

一、为什么需要 WebSocket 初次接触 WebSocket 的人&#xff0c;都会问同样的问题&#xff1a;我们已经有了 HTTP 协议&#xff0c;为什么还需要另一个协议&#xff1f;它能带来什么好处&#xff1f; 答案很简单&#xff0c;因为 HTTP 协议有一个缺陷&#xff1a;通信只能由客…

程序员职业素养

程序员应该具备的职业素养 一、专业精神1.1、专业精神在程序员职业生涯中的重要性1.2、追求技术的过程1.3、专业精神对团队和项目的影响1.4、专业精神在个人职业发展中的意义 二、沟通能力2.1 沟通能力在程序员职业生涯中的重要性2.2 沟通能力的要素2.2.1. 有效的口头和书面表达…

UPS负载箱的使用注意事项有哪些?

UPS负载箱是用于模拟电网中各种负载的设备&#xff0c;广泛应用于电力系统、通信系统、数据中心等领域。为了保证UPS负载箱的正常运行和使用安全&#xff0c;在使用过程中需要注意以下几点&#xff1a; 1. 选择合适的负载箱&#xff1a;根据实际需求选择合适的负载箱&#xff0…

DevExpress WPF中文教程:Grid - 如何完成列和编辑器配置(设计时)?

DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序&#xff0c;这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…

数据密集型企业是如何选择替代FTP传输文件的系统的?

数据密集型企业是指其发展和运行高度依赖于数据、算法和算力的闭环优化体系的企业。这类企业拥有规模化知识创造者、更广泛的智能工具以及更丰裕的数据要素资源。 毋庸置疑&#xff0c;数据对于数据密集型企业来说是最关键、最核心的资产&#xff0c;但数据密集型企业同样也面临…

航天科技集团与SPACEX公司的思考与分析

近期&#xff0c;中国航天科技集团正式发文与SPACEX对标的认识结果&#xff0c;包括发展理念上、科研生产模式上、关键核心技术上、质量效率效益上存在明显差距与不足。真诚的态度&#xff0c;赢得了社会上的广泛关注和积极评价。真心为老东家能够保持这份清醒而高兴。 从对标管…

WPF学习(1)--类与类的继承

在面向对象编程中&#xff0c;继承是一种机制&#xff0c;允许一个类&#xff08;称为子类或派生类&#xff09;从另一个类&#xff08;称为父类或基类&#xff09;继承属性和方法。继承使我们能够创建一个通用类&#xff0c;然后根据需要扩展或修改它以创建更具体的类。以下是…

关于pip的15个使用小技巧

认识pip 众所周知&#xff0c;pip可以对python的第三方库进行安装、更新、卸载等操作&#xff0c;十分方便。 pip的全称&#xff1a;package installer for python&#xff0c;也就是Python包管理工具。 可能有些人用了很久pip&#xff0c;但还不清楚包管理工具是个啥。 我…

气膜建筑一平多少钱—轻空间

气膜建筑是一种以膜材为主要结构材料&#xff0c;通过空气压力支撑的建筑形式。它广泛应用于体育场馆、展览馆、仓库及临时活动场所等多种领域&#xff0c;具有快速搭建、灵活使用、节能环保等诸多优势。 气膜建筑的成本构成 气膜建筑的成本主要由以下几个部分构成&#xff1a;…

爬虫相关面试题

一&#xff0c;如何抓取一个网站&#xff1f; 1&#xff0c;去百度和谷歌搜一下这个网站有没有分享要爬取数据的API 2, 看看电脑网页有没有所需要的数据&#xff0c;写代码测试调查好不好拿&#xff0c;如果好拿直接开始爬取 3&#xff0c;看看有没有电脑能打开的手机网页&a…

新加坡裸机云多IP服务器为何适合跨境外贸业务

新加坡裸机云多IP服务器在跨境外贸业务中展现出了卓越的适配性&#xff0c;其独特优势为外贸企业提供了强大的支持。以下将详细阐述为何新加坡裸机云多IP服务器是跨境外贸业务的理想选择。 首先&#xff0c;新加坡裸机云多IP服务器在性能上表现出色。由于去除了虚拟化层的开销&…

2024端午节活动回顾,传承经典文化,共铸企业精神之魂!

端午佳节来临&#xff0c;为了弘扬中华民族优秀的传统文化&#xff0c;国际数字影像产业园开展了“端午粽动员&#xff0c;尽情放粽”端午节主题活动&#xff0c;把节日的祝福送到了全体职工的身边。 此次端午节活动时间为上午9点半至下午1点&#xff0c;活动地点设置在国际数…

19.1 HTTP客户端-HTTP协议、GET请求、POST请求

1. HTTP协议 TCP/IP协议栈由上至下分为以下四层&#xff1a; 应用层&#xff1a;为用户提供应用服务时的通信活动 DNS、FTP&#xff08;文件传输&#xff09;、HTTP&#xff08;超文本传输&#xff09;传输层&#xff1a;网络中两台计算机之间的数据传输 TCP、UDP、SPX网络层…

百问网全志V853开发板烧录开发板系统教程

烧录开发板系统 注意&#xff1a;此方式烧录进的文件系统是ubifs文件系统&#xff0c;如果操作 需要网络文件系统挂载或者使用TF卡&#xff0c;不推荐使用。 准备工作 1.100ASK-V853-Pro开发板 x1 2. 下载全志线刷工具AllwinnertechPhoeniSuit 3. TypeC线 X2、12V电源线X1 4…