数组深入详解


1、什么是数组?

Java 语言中提供的数组是用来存储固定大小的同类型元素。
如:可以声明一个数组变量,如 numbers[100] 来代替直接声明 100 个独立变量 number0,number1,…,number99。
注意事项:

1)数组中存放的元素其类型相同

2)数组的空间是连在一起的

3)每个空间有自己的编号,其实位置的编号为0,即数组的下标。

上传图片,需要对图片格式进行校验,这是就可以使用数组

2、数组的创建及初始化

数组的创建

T[ ] 数组名 = new T[N];
T:表示数组中存放元素的类型 如:int 、double
T[ ]:表示数组的类型 如:int[ ] 整型数组、double[ ] 浮点型数组
N:表示数组的长度 如:5表示存放5个对应类型的元素
如:

int[] arr1 = new int [10]; //创建一个可以容纳10个int类型元素的数组
char[] arr2 = new char[10]; //创建一个可以容纳10个char类型元素的数组
double[] arr4 = new double[10]; //创建一个可以容纳10个double类型元素的数组
String[] array3 = new String[10]; //创建一个可以容纳10个字符串的数组

3、数组的初始化

数组的初始化主要分为动态初始化以及**静态初始化 **

3.1、静态初始化

静态初始化:在创建数组时不直接指定数据元素个数,而直接将具体的数据内容进行指定
如:

int[] arr1 = new int []{0,1,2,3,4,5,6,7,8,9};
char[] arr2 = new char[]{'a', 'b','c'};
double[] arr3 = new double[]{1.1,2.2,3.3,4.4,5.5};
String[] arr4 = new String[]{"abc","efg","hij"};

也可以将new T去掉,简写为:

int[] arr1 = {0,1,2,3,4,5,6,7,8,9};
char[] arr2 = {'a', 'b','c'};
double[] arr3 = {1.1,2.2,3.3,4.4,5.5};
String[] arr4 = {"abc","efg","hij"};

虽然省去了new T[ ], 但是编译器编译代码时还是会还原。
注意:

静态初始化虽然没有指定数组的长度,编译器在编译时会根据{}中元素个数来确定数组的长度。
静态初始化时, {}中数据类型必须与[]前数据类型一致。
静态初始化可以简写。

3.2、动态初始化


动态初始化:在创建数组时,直接指定数组中元素的个数
如:

int[] arr1 = new int [10]; //创建一个可以容纳10个int类型元素的数组
char[] arr2 = new char[10]; //创建一个可以容纳10个char类型元素的数组
double[] arr4 = new double[10]; //创建一个可以容纳10个double类型元素的数组
String[] array3 = new String[10]; //创建一个可以容纳10个字符串的数组

与静态初始化不同,动态初始化后续可以添加数组的内容,以int[ ] arr=new int [5]; 为例:

int[] arr = new int[5];
arr[0]=1;
arr[1]=2;
arr[2]=3;
arr[3]=4;
arr[4]=5;

静态和动态初始化也可以分为两步。

int[] array2;
array2 = new int[]{10, 20, 30}; //静态
int[] array1;
array1 = new int[10]; //动态

如果没有对数组进行初始化,数组中元素有其默认值:
如果数组中存储元素类型为引用类型,默认值为null

3.2、数组中元素访问

数组的下标

数组在内存中是一段连续的空间,空间的编号都是从0开始的,依次递增,该编号称为数组的下标,数组可以通过下标访问其任意位置的元素。

遍历数组

length 数组的长度:数组名.length
在数组中可以通过 数组对象.length 来获取数组的长度,举例使用:‘

public class Test1 {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5,6,7,8,9,10};
        int i=0;
        for(i=0;i<arr.length;i++){
            System.out.println(arr[i]);
        }
    }
}

for each语法:

for(元素类型t 元素变量x : 遍历对象obj){ 
     引用了x的java语句; 

for-each 是for循环的另外一种使用方式,能够更方便的完成对数组的遍历. 可以避免循环条件和更新语句写错。
举例使用(打印数组内元素):

public class Test1 {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5,6,7,8,9,10};
        for(int x:arr){
            System.out.println(x);
        }
    }
}

4、jvm内存分布


内存是一段连续的存储空间,主要用来存储程序运行时数据的。 如果对内存中存储的数据不加区分的随意存储,那对内存管理起来将会非常麻烦,因此JVM(Java虚拟机)也对所使用的内存按照功能的不同进行了划分。

栈:一般存储局部变量等。 堆:一般存储对象等。
首先我们知道,Java中数据类型分为基本数据类型和引用数据类型,基本数据类型分为8种类型4大类,而引用数据类型中存放的是地址。

5、数组的内存分布

对于数组来说,其内存分布为:

那么问题来了,下面几道题打印arr2结果为什么?

int[] arr1 = {1,2,3,4,5};
int[] arr2 = arr1;
由上图可知,arr1中存放的是数组首元素的地址,将arr1赋给arr2,即arr2也指向{1,2,3,4,5},都与其建立了联系。打印arr2结果为1,2,3,4,5

如进行以下修改,打印arr2结果为什么?

int[] arr1 = {1,2,3,4,5};
int[] arr2 = arr1;
arr2[0] = 66;
因为arr2也与arr1所指向的内容建立了联系,因此不管谁进行修改,都会修改 {1,2,3,4,5},所以修改arr2[0]为66后,打印arr2结果为 66,2,3,4,5
若进行以下修改,打印arr1结果为什么?

int[] arr1 = {1,2,3,4,5};
int[] arr2 = {100,200,300};
arr1=arr2;

此时arr1中存放的地址是arr2所指向的元素的地址,与 {1,2,3,4,5} 的联系断开,因为没有人与 {1,2,3,4,5} 建立联系,所以其会被销毁。arr1打印结果为100,200,300

空 null

null 在 Java 中表示 “空引用” , 也就是一个不指向对象的引用

int[] arr = null; //arr数组不指向任何对象,以后若需要可以指向其它对象
System.out.println(arr[0]);//打印会报空指针异常
null 的作用类似于C语言中的 NULL (空指针), 都是表示一个无效的内存位置. 因此不能对这个内存进行任何读写操作. 一旦尝试读写, 就会报错 NullPointerException(空指针异常)。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第二百六十六回

文章目录 1. 概念介绍2. 分析与解决2.1 分析问题2.2 解决方案 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何修改CircleAvatar的大小"相关的内容&#xff0c;本章回中将介绍如何修改StatusBar中文字的颜色.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1.…

鸿蒙Harmony-层叠布局(Stack)详解

我们总是为了太多遥不可及的东西去拼命&#xff0c;却忘了人生真正的幸福不过是灯火阑珊处的温暖&#xff0c;柴米油盐的充实&#xff0c;人生无论你赚的钱&#xff0c;是多还是少&#xff0c;经历的事情是好还是坏&#xff0c;都不如过好当下的每一天&#xff01; 目录 一&am…

CF1178F1 Short Colorful Strip 题解

Short Colorful Strip 传送门 题面翻译 题目描述 这是F题的第一个子任务。F1和F2的区别仅在对于m和时间的限制上 有n1种颜色标号从0到n&#xff0c;我们有一条全部染成颜色0的长为m的纸带。 Alice拿着刷子通过以下的过程来给纸带染色&#xff1a; 我们按照从1到n的顺序进…

美国初创公司Rabbit推出口袋AI设备R1;吴恩达课程:使用LangChain.js构建强大的JavaScript应用

&#x1f989; AI新闻 &#x1f680; 美国初创公司Rabbit推出口袋AI设备R1&#xff0c;短时间内被抢购一空 摘要&#xff1a;美国初创公司Rabbit在CES 2024上发布了口袋AI设备R1&#xff0c;这款设备在一天内被抢购一空&#xff0c;售价为199美元。R1具有小巧玲珑的触屏、摄像…

【线性表的基本操作实现及其应用 】

线性表的基本操作实现及其应用 1.实验目的 ⑴ 熟练掌握线性表的基本操作在两种存储结构上的实现&#xff0c;其中以熟悉各种链表的操作为重点。 ⑵ 巩固高级语言程序设计方法与技术&#xff0c;会用线性链表解决简单的实际问题。 2.实验原理与要求 ⑴ 按照数据结构实验任务书&…

【笔记】书生·浦语大模型实战营——第四课(XTuner 大模型单卡低成本微调实战)

【参考&#xff1a;tutorial/xtuner/README.md at main InternLM/tutorial】 【参考&#xff1a;(4)XTuner 大模型单卡低成本微调实战_哔哩哔哩_bilibili-【OpenMMLab】】 总结 学到了 linux系统中 tmux 的使用 了解了 XTuner 大模型微调框架的使用 pth格式参数转Hugging …

【量化交易故事】小明开启了量化创业之旅-01

故事开始于2023年的春天&#xff0c;小明是一位对金融市场充满热情的IT工程师。在经历了数次基于主观判断和个人情绪进行投资却收获平平后&#xff0c;他意识到传统交易方式中的人为因素难以避免&#xff0c;而这往往成为影响投资决策稳定性和准确性的关键障碍。在一次偶然的机…

工作压力测试

每个职场人都会遇到工作压力&#xff0c;在企业人力资源管理的角度来看&#xff0c;没有工作压力是人力资源的低效&#xff0c;适当的工作压力可以促使员工不断进取&#xff0c;然而每个人的抗压能力是不同的&#xff0c;同样的工作量和工作难度&#xff0c;不同的人在面对相同…

【Java语言基础②】Java基本语法——Java程序基本格式,注释,标识符,常量

通过前面的学习&#xff0c;大家对Java语言有了一个基础认识&#xff0c;但现在还无法使用Java语言编写程序&#xff0c;要熟练使用Java语言编写程序&#xff0c;必须充分掌握Java语言的基础知识。今天咱们就来聊一聊Java的基本语法。 1.java程序的基本格式 Java程序代码必须…

在win11中安装“mingw-w64-gcc-13.2-stable-r40”

在windows系统中&#xff0c;安装完VSCode后&#xff0c;还需要安装mingw&#xff0c;才可以使用C和C编译。 1、从MinGW-w64镜像站点&#xff1a;http://files.1f0.de/mingw&#xff0c;下载“mingw-w64-gcc-13.2-stable-r40”&#xff0c;见下图&#xff1a; 2、将“mingw-w6…

Centos7编译Python3.11源码并安装完成的详细教程

Python3.11的Linux源码&#xff1a; Index of /ftp/python/https://www.python.org/ftp/python/由于Centos7里自带的openssl是1.0版本的&#xff0c;而Centos Stream8和9用的是openssl-1.1.1版本的。 注意&#xff1a;openssl必须是openssl-1.1.1版本的&#xff0c;虽然最高版…

【大厂秘籍】 - Java多线程面试题

Java多线程面试题 友情提示&#xff0c;看完此文&#xff0c;在Java多线程这块&#xff0c;基本上可以吊打面试官了 线程和进程的区别 进程是资源分配的最小单位&#xff0c;线程是CPU调度的最小单位 线程是进程的子集&#xff0c;一个进程可以有很多线程&#xff0c;每条线…

10.9.2 std::function 存储函数对象 Page184

41行&#xff0c;pending只是inc的复制品&#xff0c;所以43&#xff0c;44行&#xff0c;不会改变inc()的值 demo_function2()的运行结果&#xff1a; 59行&#xff0c;pending是inc的引用&#xff0c;所以61,62行将会改变inc()的值

CloudFlare平台下载的WARP一直连不上(warp无法连接)解决办法

遇到问题&#xff1a; 解决办法&#xff1a; 下载一个warp选ip的文件夹&#xff0c;选一下ip就行了。 下载链接如下&#xff1a; https://pan.kejicode.cn/d/Onedrive/WIN%E7%AB%AFwarp%E8%87%AA%E9%80%89IP(%E6%89%8B%E5%8A%A8%2B%E8%87%AA%E5%8A%A8).rar?signRqBdHIMyyhg…

查询和结果处理的Java代码

match_all查询&#xff1a; //查询所有文档 match_all查询Testvoid testMatchAll() throws IOException {// 1.准备RequestSearchRequest request new SearchRequest("hotel");// 2.准备DSLrequest.source().query(QueryBuilders.matchAllQuery());// 3.发送请求Sea…

Apollo之原理和使用讲解

文章目录 1 Apollo1.1 简介1.1.1 背景1.1.2 简介1.1.3 特点 1.2 基础模型1.3 Apollo 四个维度1.3.1 application1.3.2 environment1.3.3 cluster1.3.4 namespace 1.4 本地缓存1.5 客户端设计1.5.1 客服端拉取原理1.5.2 配置更新推送实现 1.6 总体设计1.7 可用性考虑 2 操作使用…

海外媒体宣发:新闻媒体发稿引爆社交媒体的7个诀窍-华媒舍

社交媒体的崛起已经改变了新闻媒体的传播方式。从Facebook到Twitter&#xff0c;从Instagram到LinkedIn&#xff0c;社交媒体平台为新闻媒体提供了一个巨大且潜力无限的受众群体。要在这个竞争激烈的环境中引爆社交媒体&#xff0c;需要一些技巧和诀窍。在本篇文章中&#xff0…

【CSS】保持元素宽高比

保持元素的宽高比&#xff0c;在视频或图片展示类页面是一个重要功能。 本文介绍其常规的实现方法。 实现效果 当浏览器视口发生变化时&#xff0c;元素的尺寸随之变化&#xff0c;且宽高比不变。 代码实现 我们用最简单的元素结构来演示&#xff0c;实现宽高比为4&#xf…

WorkPlus卓越的即时通讯工具,助力企业提升工作效率

在当今快节奏的商业环境中&#xff0c;高效沟通和协作是企业成功的关键。而即时通讯作为实现高效沟通的利器&#xff0c;成为了现代企业不可或缺的一部分。作为一款领先的即时通讯工具&#xff0c;WorkPlus以其卓越的性能和独特的功能&#xff0c;助力企业打造高效沟通和协作的…

初始化数组

一、静态初始化格式&#xff1a; 数据类型[ ] 数组名 new 数据类型[ ]{元素1&#xff0c;元素2&#xff0c;元素3......} 等号后面的new 数据类型可以省略 注意&#xff1a;什么类型的数组只能存放什么类型的数据 直接打印a或b会显示其地址 数组的元素个数&#xff1a;arr…
最新文章