首页 > 编程语言 >java基础-->数组

java基础-->数组

时间:2022-10-29 14:45:53浏览次数:46  
标签:初始化 java -- 元素 数据类型 int 数组 arry

**# 数组介绍

  • 数组指的是一种容器,可以用来存储同种数据类型的多个值。
  • 数组容器在存储数据的时候,需要结合隐式转换考虑。
  • 下面写的都是一维数组,多维数组就是多个中括号即可。一般最常用的是二位数组,第一个括号代表行,第二个代表列。

数组的定义与静态初始化

数组的定义

格式1

//数据类型[] 数组名
//举例
int [] array;  

格式2

//数据类型 数组名[]
//举例
int array[];

数组的静态初始化

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

数组的静态初始化

//数据类型[] 数组名字=new 数据类型[]{元素1,元素2,....};
//简写:数据类型[] 数组名={元素1,元素2,元素3...};
//举例
int[] arry=new int[]{1,2,3};
int[] arry={1,2,3,4};

注:

  • 数组一初始化长度就固定不会发生变化了

数组的地址值和元素访问

数组的地址值

数组的地址值表示数组在整个内存中的位置。

可以System.out.println(数组名);这样直接打印出数组的地址值。

数组地址值的格式:

  • [I@7ef20235

  • [表示当前是一个数组

  • I表示当前数组里面的元素都是Int类型的

  • @表示一个建个符号(固定格式而已)

  • 7ef20235是数组的真正地址值(十六进制)

平时习惯把整体叫数组的地址值。

数组的元素访问

格式

//数组名[下标];
int a[]={1,2,3};
//a[0],a[1],a[2];就是数组的元素访问

数组元素都是从下标为0开始的

故在循环遍历中循环结束条件一般为 数组长度-1

数组长度-1是数组的最大下标~

数组遍历

int arry[]={1,2,3,4,5,6,7,8,9};
for(int i=1;i<arry.length;i++){
	System.out.println(arry[i]);
}

这里是一个静态函数length

一般用来表示数组长度时使用的。

数组动态初始化

  • 动态初始化:初始化时只指定数组的长度,由系统为数组分配初始值。

格式

//数据类型[] 数组名=new 数据类型[数组长度];
//举例
int[] arry=new int[3];

数组默认初始化的值规律

  • 整数类型:默认值0
  • 小数类型:默认值0.0
  • 字符类型:默认值'/u000' 打印出来是空格
  • 布尔类型:默认值false
  • 引用数据类型:默认初始值null

动态初始化和静态初始化的区别:

  • 动态初始化:手动指定数组的长度,由系统给出默认值.
  • 静态初始化:手动指定数组元素,系统会根据元素个数,计算出数组的长度。

数组常见问题

  • 数组越界:

    当访问了数组中不存在的索引,就会引发索引越界异常。

    就比如说我们给定数组长度为3,我们访问了a[4]这种情况就越发生数组越界。

数组常见操作

求最值

int min=99999;
int max=0;
int[] arry={1,2,3,4,5,6,7,8,9,10};
for(int i=0;i<arry.length;i++){
    if(arry[i]>max){
        max=arry[i];
	}else{
        min=arry[i];
    }
}

遍历求和

int[] arry={1,2,3,4,5,6,7,8,9,10};
int sum=0;
for(int i=0;i<arry.length;i++){
	sum+=arry[i];
}

数组内元素交换

int arry[]={1,2,3,4,5};
int tmp;
tmp=arry[4];
arry[4]=arry[0];
arry[0]=tmp;

数组内存图

java内存分配

image

jvm在计算机内存中分为五个区:

  • 方法运行时,使用的内存,比如说main方法,进入方法栈中执行。

  • 存储对象或数组,new来创建的,都存储在堆内存中。

    只要是new出来的一定是在堆中开辟了一个小空间。

    如果new了多次就会开辟多个。

  • 方法区

    存储可以运行的class文件

  • 本地方法栈

    JVM在使用操作系统功能的时候使用,与开发无关。

  • 寄存器

    给CPU使用,与开发无关。详细在汇编中有

注意:

在jdk8开始,取消了方法区,新增原空间。

把原来方法去的多种功能进行了拆分,有的功能放到了堆中,有的功能放到了元空间中。

image

俩个数组指向同一个内存空间

情况如下

int[] arr1={11,12};
int[] arr2=arr1;
//此时arr1和arr2共享同一个内存空间
//数组在定义时会在堆空间中开辟一个小空间来存储数组的数据
//而main方法在栈中,栈内数组的表现情况是 int[] arry1=数据的地址。

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

标签:初始化,java,--,元素,数据类型,int,数组,arry
From: https://www.cnblogs.com/wdadwa/p/java_learning_07.html

相关文章

  • 网络协议包括三个要素分别为语法、语义、同步等
    网络协议包括三个要素分别为语法、语义、同步等1、语法是用户数据与控制信息的结构与格式,以及数据出现的顺序;2、语义是解释控制信息每个部分的意义;需要发出何种控制信息,......
  • 【数据结构-数组】数组的基本操作
    目录1数据结构定义2插入操作3删除操作4按值查找1数据结构定义#defineMAX50typedefstruct{intdata[MAX];intlength;}SqList;初始化:voidIni......
  • 作用域及作用域链
    作用域概述:JavaScript拥有函数作用域:每个函数创建一个新的作用域。一个变量的作用范围称为作用域,在全局声明的变量就是全局作用域(可见性)。在函数内容声明的变量它的作......
  • python自学 简单的网站开发 3
    创建子路由1.项目过大的时候,总路由不宜放过多的配置文件,可以把总路由的配置放置到子路由里面去。先在myapp中新增一个url.py的文件。 2.然后把总路由的内容放到u......
  • zookeeper和kafka安装
    系统:CentOSLinux7(Core)x86_64一、JDK安装1.安装准备#查看系统jdk版本java-version#检查jdk自带安装包rpm-qa|grepjava#卸载jdkyum-yremovetzdat......
  • String类型时间与Date时间转换
    1.String类型的时间转为DateTimepublicstaticDatetransferString2Date(Strings){Datedate=newDate();try{date=newSimpleDateFormat("......
  • 从新开始学JAVA - IDEA
    什么是IDE全称是集成开发环境(IDE,IntegratedDevelopmentEnvironment)是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具。集成......
  • 局部最小问题
    packageclass01;/***局部最小问题*<p>*对于一个数组,使用二分法的前提,一定是这个数组整体有序吗?*答:不是。局部最小问题就是反例。*/publicclassCode07......
  • vue 监听input值变化(关键词搜索)
    一、问题做搜索功能时,监听input的value值变化实时请求数据,每增加一个字符,就发送一次请求。例如输入12345,会监听到5次变化112123123412345,导致连续请求5次。这是没必要......
  • 重新整理 .net core 实践篇 ———— linux 上线篇 [外篇]
    前言简单整理一个linux简单上线。这个是该系列的外篇,该系列继续更新。献给刚学的人。正文安装实例dotnetnewwebapp-nAspNetCoreDemo-ofirstwebapp编译并运行......