JavaSE基础语法--数组(1)

news2024/11/16 15:49:56

数组的定义与使用

数组就是存储相同数据类型的一组数据。它有如下特点:

1.数组中存放的数据是一样的

2.数组的空间是连续的

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


那么在Java里面如何定义一个数组呢?

假设我现在想定义一个整形数组,数组名为arr,那么我可以有如下写法:

int[] arr={1,2,3,4,5,6};    //第一种定义

是不是和C语言的有点区别。在Java中,为了更好的区别变量和数据类型,将方括号放在了数组名的前面,这样的好处是能一眼看出这个变量的类型是什么。而在C语言中定义一个变量是这样的:

int arr[]={1,2,3,4,5,6};

Java这两种写法都支持,但是C语言只支持int arr[]的这种写法。注意:在Java数组的方括号中是不能填写数字来标识有几个元素。那么Java还提供了另外二种种定义方式:

int[] arr=new int[]{1,2,3,4,5,6};  //第二种定义
int[] arr=new int[10];   //第三种定义

使用new关键字来定义数组。通过new关键字,来实例化一个对象。所以Java当中的数组,其实就是一个对象。第一种定义和第二种定义本质是是没有区别的,第一种只是第二种的简写方式。

第三种定义方式是可以在右边的方括号中放入数据的个数,但是他不能通过{}来初始化数据,默认填充的都是0;如图:


 在定义数组的时候如果没有初始化,数组空间里面存的值就是默认值:

 这里我对boolean类型做了测试,我们看到不初始化的时候它里面默认是填入false。那么我们再对char类型做一下测试如图:

 可以看到里面存的是\u0000。


 数组的使用

数组的使用和C语言是类似的,都是通过下标去访问,并且是从0数组下标开始:

 现在我们想得知这个数组的长度是多少我们可以使用数组名.length来求:


 如果我想对数组的某个位置赋值也是通过下标来引用,比如我想把第一个元素也就是数组下标为0的元素改成100:


 遍历数组也是非常简单的,结合我们上面的数组操作以及for循环语句就可以实现数组的遍历:


Java中还有一种不一样的for循环遍历方式:

对比两种for循环遍历,我们发现第一种for循环是通过数组下标访问的,第二种for循环遍历数组和下标是没有关系的。

Java为了开发的便利性,提供了很多现成的方法。有专门的一个处理数组的类来帮助我们实现高效的开发,这个类叫Arrays我们尝试一下:

 单纯打印数组的话这种方法是最方便的。如果想要精确操作数组的元素还是需要用for循环来自己写逻辑。Arrays里面有很多的方法都很好用,下面在举一个例子排序:

 我们使用Arrays.sort这个类方法实现了排序,非常的方便简洁。


数组是引用类型

 最后我们说一下引用类型。因为Java数组是一个引用类型的变量。那什么是引用类型呢?

首先我们的了解Java虚拟机的布局。

 上面是一个大概的内存布局图,我们知道数组是定义在一个方法内的,那么它是一个局部变量。局部变量是存在栈上的。为什么称之为引用类型呢,因为在栈上数组本身并不存储数据,数组开辟的空间存放的数据是在堆上的,而栈上存储了一个地址,这个地址是指向堆上开辟的数组空间的起始地址。用一个图来理解是这样的:

 因此我们可以理解为对数组数据的访问是间接访问的形式,因此也称之为引用类型。 

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

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

相关文章

【Python入门】Python循环语句(for循环的嵌套应用)

前言 📕作者简介:热爱跑步的恒川,致力于C/C、Java、Python等多编程语言,热爱跑步,喜爱音乐的一位博主。 📗本文收录于Python零基础入门系列,本专栏主要内容为Python基础语法、判断、循环语句、函…

行为型模式--中介者模式

目录 概述 结构 案例实现 优缺点 优点: 缺点: 使用场景 概述 一般来说,同事类之间的关系是比较复杂的,多个同事类之间互相关联时,他们之间的关系会呈现为复 杂的网状结构,这是一种过度耦合的架构&a…

深入理解深度学习——BERT派生模型:跨语言模型XLM(Cross-lingual Language Model)

分类目录:《深入理解深度学习》总目录 BERT本应在语义理解上具有绝对优势,但其训练语料均为英语单语,受限于此,早期的BERT只在英语文本理解上有优势。随着全球化进程的加速,跨语言的预训练语言模型也具有非常重要的应用…

seldom之数据驱动

seldom之数据驱动 如果自动化某个功能,测试数据不一样而操作步骤是一样的,那么就可以使用参数化来节省测试代码。 seldom是我在维护一个Web UI自动化测试框,这里跟大家分享seldom参数化的实现。 GitHub:GitHub - SeldomQA/seld…

idea设置项目编码为utf8

设置当前项目的编码为utf8 File -> Settings -> Editor -> File Encoding: 设置新建项目的编码为utf8 File -> New Projects Setup -> Settings for New Projects:

Flutter系列(九)ListView实现新闻列表和正文布局

基础工程: Flutter系列(四)底部导航顶部导航图文列表完整代码_摸金青年v的博客-CSDN博客 相关文章: Flutter系列(七)ListView 图文列表详解_flutter 图文列表_摸金青年v的博客-CSDN博客 一、前言 本文用flutter实现新闻…

注册 Google 邮箱(最新:保姆级教程)

文章目录 1、我们使用浏览器打开谷歌邮箱官网(gmail.google.com),进入谷歌邮箱的登录主页,我们点击左下方的创建账号按钮,选择个人用途 2、在进入的界面我们不要着急填写资料,我们先修改语言,点…

(2023,3D 场景生成器 Infinigen)使用程序化生成的无限逼真世界

Infinite PhotorealisticWorlds using Procedural Generation 公众号:EDPJ 目录 0. 摘要 1. 简介 2. 相关工作 3. 方法 4. 实验 参考 S. 总结 S.1 主要思想 S.2 方法 S.3 场景生成 0. 摘要 我们介绍 Infinigen,一个自然世界逼真 3D 场景的…

Verilog | 除法--试商法

试商法 采用试商法实现除法运算,对于32位的除法,需要至少32个时钟周期才能得到除法结果。下面是试商法的一般过程。 设被除数是m,除数是n,商保存在s中,被除数的位数是k,其计算步骤如下(为了便…

leetcode814. 二叉树剪枝(java)

二叉树剪枝 leetcode814. 二叉树剪枝题目描述DFS 深度优先遍历 二叉树专题 leetcode814. 二叉树剪枝 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/binary-tree-pruning 题目描述 给你二叉树的根结点 root &#xff0c…

《机器学习公式推导与代码实现》chapter17-kmeans

《机器学习公式推导与代码实现》学习笔记,记录一下自己的学习过程,详细的内容请大家购买作者的书籍查阅。 聚类分析和k均值聚类算法 聚类分析(cluster analysis)是一类经典的无监督学习算法,在给定样本的情况下,聚类分析通过度量…

【半监督:交叉分辨率:解纠缠】

Cross-Resolution Semi-Supervised Adversarial Learning for Pansharpening (用于泛锐化的交叉分辨率半监督对抗学习) 现有的基于深度神经网络(DNN)的方法已经产生了良好的泛锐化图像。然而,监督DNN为基础的泛锐化方…

卷积是什么

参考: 【官方双语】那么……什么是卷积?https://www.bilibili.com/video/BV1Vd4y1e7pj/ [建议看完] x.1 一维卷积 一维卷积,即对于两个向量的卷积,就是将向量翻转后,从前向后滑动,相乘再相加。 x.2 二维卷…

Spring Boot启动原理

Spring Boot的自动配置为我们提供了快捷方便的方式来运行Spring应用,但很多开发者对其内部启动原理还不是很明白。这篇博客旨在解开Spring Boot的神秘面纱,帮助大家理解它的启动原理。 入口类和注解 我们的Spring Boot应用通常从一个主类开始&#xff…

感知机(Perceptron)底层原理

1.感知机(Perceptron)底层原理 声明:笔记来源于《白话机器学习的数学》 感知机是接受多个输入后将每个值与各自权重相乘,最后输出总和的模型。 单层感知机因过于简单,无法应用于实际问题,但它是神经网络和深…

8个很少用,但却很好用的 Python 库!

本文介绍一些我们可能很少听过,但是对于特定问题或者特定任务来说,可能会非常有帮助的 Python 库 技术交流 技术要学会分享、交流,不建议闭门造车。一个人可以走的很快、一堆人可以走的更远。 好的文章离不开粉丝的分享、推荐,文…

黑马程序员前端 Vue3 小兔鲜电商项目——(六)二级分类页

文章目录 二级路由配置模版代码配置路由关系跳转配置 面包屑导航实现封装接口渲染数据 分类基础列表实现准备接口渲染数据 列表筛选实现无限加载实现定制路由 scrollBehavior 二级路由配置 模版代码 创建 src\views\SubCategory\index.vue 文件,添加以下代码&…

云服务器部署企业版openGauss,本地Data Studio远程连接

1.下载安装包 在华为云上租一台服务器,操作系统选:openEuler 20.03 64bit (64-bit) 获取openGauss Server安装包,企业版:软件包链接 使用xshell连接服务器,准备软硬件安装环境。准备软硬件安装环境 教程 下载Data …

javaee 过滤器加cookie实现自动登录

思路 如上图,如果勾选了自动登录,在登录时,就将用户名和密码存储到cookie中,当下次访问首页时,过滤器先拦截请求,获取下cookie中的账号密码,然后如果cookie中的账号密码有效就将登录信息存储到…

Paddle FastDeploy 执行Cmake 时错误处理方法

1.Paddle FastDeploy 在cmake 时的命令执行报错处理 命令是参考官网的,如下: git clone https://github.com/PaddlePaddle/FastDeploy.git cd FastDeploy mkdir build && cd build cmake .. -G "Visual Studio 16 2019" -A x64 \-DENABLE_ORT_BA…