【JavaSE】一维数组和二维数组详解

欢迎关注个人主页:逸狼


创造不易,可以点点赞吗~

如有错误,欢迎指出~


目录

一维数组

基本语法

初始化

遍历和打印

数组是引用型变量

基本类型变量与引用类型变量的区别

null

数组传参和返回

总结

二维数组

基本语法

初始化

遍历和打印



一维数组

数组:可以看成是相同类型元素的一个集合。

基本语法

T[] 数组名 = new T[N]; 

  • T:表示数组中存放元素的类型
  • T[]:表示数组的类型
  • N:表示数组的长度

初始化

int[] array={1,2,3,4,5};
int []arr1=new int[]{1,3,4};
int []aa=new int[19];

遍历和打印

  • 数组是一段连续的内存空间,因此支持随机访问,即通过下标访问快速访问数组中任意位置的元素  
  • 下标从0开始,介于[0, N)之间不包含N,N为元素个数,不能越界,否则会报出下标越界异常。

三种方法

        public static void main(String[] args) {
            int[] array={1,2,3,4,5};
            System.out.println(array.length);//求数组长度
            System.out.println(array[2]);//通过下标访问数组元素

            //遍历打印数组
            for (int i = 0; i < array.length; i++) {
                System.out.print(array[i]+" ");
            }

            //for each循环 遍历数组,把每一个值放入x中,获取不到下标
            for (int x:array) {
                System.out.print(x+" ");
            }

            //借助Java的原生的方法   
            String ret= Arrays.toString(array);//将数组元素以字符串的形式输出
            System.out.println(ret);

数组是引用型变量

引用变量并不直接存储对象本身,可以简单理解成存储的是对象在堆中空间的起始地址。通过该 地址,引用变量便可以去操作对象。

JVM内存分布

  • 程序计数器 (PC Register): 只是一个很小的空间, 保存下一条执行的指令的地址
  • 虚拟机栈(JVM Stack): 与方法调用相关的一些信息,每个方法在执行时,都会先创建一个栈帧,栈帧中包含 有:局部变量表、操作数栈、动态链接、返回地址以及其他的一些信息,保存的都是与方法执行时相关的一 些信息。比如:局部变量。当方法运行结束后,栈帧就被销毁了,即栈帧中保存的数据也被销毁了。
  • 本地方法栈(Native Method Stack): 本地方法栈与虚拟机栈的作用类似. 只不过保存的内容是Native方法的局 部变量. 在有些版本的 JVM 实现中(例如HotSpot), 本地方法栈和虚拟机栈是一起的
  • 堆(Heap): JVM所管理的最大内存区域. 使用 new 创建的对象都是在堆上保存 ,堆是随着程序开始运行时而创建,随着程序的退出而销毁,堆中的数据只要还有在使用,就不会被销 毁。
  • 方法区(Method Area): 用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数 据. 方法编译出的的字节码就是保存在这个区域 现在我们只简单关心堆 和 虚拟机栈这两块空间

基本类型变量与引用类型变量的区别

  • 基本数据类型创建的变量,称为基本变量,该变量空间中直接存放的是其所对应的
  • 而引用数据类型创建的变量,一般称为对象的引用,其空间中存储的是对象所在空间的地址

null

可以将数组置为null

int[] arr = null;

null 的作用类似于 C 语言中的 NULL (空指针), 都是表示一个无效的内存位置. 因此不能对这个内存进行任何读写操 作. 一旦尝试读写, 就会抛出 NullPointerException.

注意: Java 中并没有约定 null 和 0 号地址的内存有任何关联

数组传参和返回

本质上还是传值调用

例如想要实现将原数组的每一位元素都扩大两倍

有两种实现方法

    //无返回值
    public static void func(int[]array1){
        for (int i = 0; i < array1.length; i++) {
            array1[i]= array1[i]*2;//将每个数字扩大2倍
        }
    }

    //数组作为返回值
    public static int[] func2(int[]array1){
        int[]tmp=new int[array1.length];
        for (int i = 0; i < array1.length; i++) {
            tmp[i]=array1[i]*2;
        }
        return tmp;//Java中数组可以是返回值
    }

    public static void main(String[] args) {
        int[] array={1,2,4,5};
        int[] retArray=func2(array);//本质上还是传值调用
        String ret=Arrays.toString(retArray);
        System.out.println(ret);
    }

总结

所谓的 "引用" 本质上只是存了一个地址. Java 将数组设定成引用类型, 这样的话后续进行数组参数传参, 其实 只是将数组的地址传入到函数形参中. 这样可以避免对整个数组的拷贝(数组可能比较长, 那么拷贝开销就会很大).

二维数组

基本语法

数据类型[][] 数组名称 = new 数据类型 [行数][列数] { 初始化数据 };

初始化

有三种

        //二维数组
        int[][]array={{1,3,4,5},{6,6,4,7}};//是第二种的简化,常用
        int[][]array2=new int[][]{{1,3,4,5},{6,6,4,7}};
        int[][]array3=new int[2][4];//全部初始化为0

遍历和打印

有两种

 public static void main(String[] args) {
        //二维数组
        int[][]array={{1,3,4,5},{6,6,4,7}};
//第一种,要数行和列的个数
        for (int i = 0; i < 2; i++) {
            for (int j = 0; j < 4; j++) {
                System.out.print(array[i][j]+" ");
            }
            System.out.println();
        }
        System.out.println("#########");
        //另一种不用数二维数组的个数的方法
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                System.out.print(array[i][j]+" ");
            }
            System.out.println();
        }
    }

结果

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

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

相关文章

动态表情包怎么制作?超简单的gif动画制作方法

动态gif表情包非常的收大众欢迎&#xff0c;小编也不例外。日常聊天斗图中都少不了它们的存在&#xff0c;gif表情包能够调节聊天的氛围。那么&#xff0c;这种gif表情包是怎么做的呢&#xff1f;下面就跟着小编一起来看看制作gif动画图片的方法&#xff0c;不需要下载任何软件…

基于GA遗传优化的离散交通网络双层规划模型设计matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于GA遗传优化的离散交通网络双层规划模型设计.优化输出路段1和路段2的收费情况收敛过程。 2.测试软件版本以及运行结果展示 MATLAB2022a版本运行 3.核心程序…

独家原创!TCN-BiGRU-Attention一键实现西储大学故障诊断与讲解!附带处理好的Excel故障诊断数据集!

声明&#xff1a;文章是从本人公众号中复制而来&#xff0c;因此&#xff0c;想最新最快了解各类智能优化算法及其改进的朋友&#xff0c;可关注我的公众号&#xff1a;强盛机器学习&#xff0c;不定期会有很多免费代码分享~ 目录 数据介绍与故障诊断讲解 1.数据预处理 2.特…

【Python】基础语法(1)

目 录 一.常量和表达式二.变量和类型变量是什么变量的语法(1) 定义变量(2) 使用变量 变量的类型(1) 整数(2) 浮点数(小数)(3) 字符串(4) 布尔(5) 其他 为什么要有这么多类型?动态类型特性 三.注释注释是什么注释的语法(1) 注释行(2) 文档字符串 注释的规范 四.输入输出和用户交…

Android熄屏/亮屏,旋转屏幕/横竖屏切换生命周期变化与activity销毁重建

Android熄屏/亮屏&#xff0c;旋转屏幕/横竖屏切换生命周期变化与activity销毁重建 1、熄屏/亮屏 熄屏后&#xff0c;Android生命周期走&#xff1a; onPause onStop 接着点亮Android手机屏幕&#xff0c;生命周期走&#xff1a; onRestart onStart onResume 2、旋转屏幕&…

JavaScript动态渲染页爬取——Playwright的使用

Playwright的使用 Playwright是微软在2020年年初开源的新一代自动化测试工具&#xff0c;其功能和Selenium、Pyppeteer等类似&#xff0c;都可以驱动浏览器进行各种自动化操作。Playwright对市面上的主流浏览器都提供了支持&#xff0c;API功能简洁又强大&#xff0c;虽然诞生…

nginx界面管理工具之nginxWebUI 搭建与使用

nginx界面管理工具之nginxWebUI 搭建与使用 一、nginxWebUI 1.nginx网页配置工具 官网地址: http://www.nginxwebui.cn 源码地址&#xff1a;https://git.chihiro.org.cn/chihiro/nginxWebUI 2.功能说明 本项目可以使用WebUI配置nginx的各项功能, 包括http协议转发, tcp协议…

EXCEL VBA将word里面的指定的关键词替换掉后并标记红色字体

EXCEL VBA将word里面的指定的关键词替换掉后并标记红色字体 Sub 开关() Call 新建副本 Call ReplaceAndHighlightInFolder End Sub Sub 新建副本()fpath ThisWorkbook.Path & "\"Dim MyFile As ObjectSet MyFile CreateObject("Scripting.FileSystemObjec…

FireWorks:加速科学计算和工作流程的强大工具

FireWorks&#xff1a;加速科学计算和工作流程的强大工具 FireWorks是一个功能强大的开源工具&#xff0c;旨在简化和加速科学计算和工作流程。它提供了一个灵活的编排框架&#xff0c;使研究人员和工程师能够高效地设计、管理和执行复杂的计算任务和工作流。本文将深入探讨Fir…

Hadoop安装部署-DataNode集群版

Hahoop分布式文件系统支持DataNode节点的大规模扩展&#xff0c;本文主要描述DataNode集群版的安装部署。 如上所示&#xff0c;Hadoop分布式文件系统中每个文件是以数据块的方式存储在不同的DataNode中&#xff0c;每个数据块都支持高可用性&#xff0c;当其中一个数据块对应的…

vue watch 深度监听

vue2文档&#xff1a;API — Vue.js vue3文档&#xff1a;侦听器 | Vue.js watch 可以用来监听页面中的数据&#xff0c;但如果监听的源是对象或数组&#xff0c;则使用深度监听&#xff0c;强制深度遍历源&#xff0c;以便在深度变更时触发回调。 一&#xff0c;监听 <t…

项目管理—项目合同签订后客户又不认了

大家好&#xff0c;我是不会魔法的兔子&#xff0c;是一名执业律师&#xff0c;创建[项目管理者的法小院儿]&#xff0c;持续从法律的角度分享项目管理中的风险及预防问题&#xff0c;让项目管理者能够提早发现与解决项目执行过程中的风险&#xff0c;同时欢迎大家一起交流&…

从快递公司内部辞职的快递员才告诉你的寄快递的真相!

我们知道现在寄快递有很多种方法&#xff0c;但是每种方法也都花费不少&#xff0c;但是我们知道最省钱的寄快递的方法吗&#xff1f;别急&#xff0c;小编了解到快递员告诉我许多快递物流的真相。我们寄快递无非就是去快递驿站寄快递&#xff0c;然后称重&#xff0c;然后计算…

七大 QC 工具图的定义与示例(看这篇就够了)

前言 七大 QC 工具图是通过数值的方式进行数据分析的工具&#xff0c;分别是鱼骨图、直方图、柏拉图、散布图、管制图、检查图和层别图。其实&#xff0c;我们在日常生活与工作中经常看到它们&#xff0c;只是样子和名字对不上而已&#xff0c;今天写这篇文章就是为了帮助自己…

蓝桥杯单片机---第十届省赛题目解析

文章目录 比赛题目一、代码相关定义、声明1.头文件声明2.变量声明 二、主要函数1.main函数2.按键扫描3.数码管显示4.LED显示5.定时器中断 三、次要函数1.初始化函数Init2.按键函数Key3.LED函数Led4.数码管函数Seg5.iic函数中6.onewire函数中 总结 比赛题目 这里因为我没有这个题…

如何搭建属于自己的Docker私有仓库

华子目录 Docker registry仓库介绍分类registry组成&#xff08;repository和index&#xff09;Repositoryindex 拉取上床仓库镜像拉取上传 知名docker仓库在docker hub商创建自己的docker registry将镜像上传到自己的registry从registry仓库中拉取镜像 搭建私有仓库Distributi…

备战蓝桥杯---树学初步1

LCA&#xff08;最近公共祖先&#xff09; 定义&#xff1a;有根树的两个节点u,v&#xff0c;他们的LCA是一个节点x,其中x是他们的公共祖先并且X的深度尽可能大。 法1---Tarjan算法&#xff1a; 核心&#xff1a;DFS并查集 在并查集中建立仅有u的集合&#xff0c;设该集合祖…

Redis入门到实战-第十三弹

Redis入门到实战 Redis中JSON数据类型常见操作官网地址Redis概述JSON常见操作更新计划 Redis中JSON数据类型常见操作 完整命令参考官网 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://redis.io/Redis概述 Redis是…

Java 扫描某包下所有类的注解并获得注解值

背景 &#xff1a; 需求 需要获取某个包下的所有的注解 并不是全部项目的 所以 只用针对某个包 进行扫描 获取注解 数据就行 百度了一圈 spring boot 没有自带的 获取注解集合的方法 在看 php 中 hyperf 框架 看到了 这个方法 就是因为 我需求是 php 和java 合体 微服务开发 …

c语言游戏实战(5):走迷宫

前言&#xff1a; 制作一个迷宫游戏是一个有趣的编程挑战。首先&#xff0c;我们需要设计一个二维数组来表示迷宫的布局&#xff0c;其中每个元素代表迷宫中的一个格子。我们可以使用不同的值来表示空格、墙壁和起点/终点。接下来&#xff0c;我们需生成迷宫。在生成迷宫的过程…