【J2SE快速进阶】——数组(及其内存分析 )

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/43091009

       早在学习其他语言如C、VB、C#、C++等时也学习过数组,平时项目中也经常用,但从没仔细再深入了解,这里学习Java又遇到了,重新整理一下。

       一句话概括数组是什么:数组就是有一组相同数据类型的数据的集合。

       数组变量属于引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。数组中每个元素的类型可以是任何数据类型。

数组定义和初始化

       数组的声明可以看做是在内存中为数组的每个元素分配空间的过程;数组的初始化可以看做往分配的空间里赋值的过程。

数组的定义

       Java中定义数组的格式为:类型[] 变量名,如int[] arr;

<pre name="code" class="java">int[] arr;
arr=new int[4];

       int[] arr这句代码定义了一个名为arr的数组变量,只在栈内存中分配一个内容为空的变量。如下图:

       arr=new int[4]这句代码的执行为变量arr中分配了一块空间,这时会在堆内存中分配一个长度为4的数组(即4个用来存储int类型的存储单元的集合),并且这个数组内的存储单元会自动初始化为0,跟类的成员变量一样。如下图:

       注意:因为Java中的数组都是存在于堆内存中的,其他一些语言如C、C++中的数组是可以存在于栈内存中,不像C和C++,Java中声明数组时不能指定数组的长度,如 int[4] arr; 这是错误的写法。

数组的初始化

       初始化一个数组可以静态初始化,也可以动态初始化。

       静态初始化,就是在定义数组的同时为数组赋值,比如:

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

       也可以写成:

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

       动态初始化,就是先定义数组,然后在需要的时候对它进行赋值,比如:

<span style="white-space:pre">	</span>int[] arr=new int[5];
<span style="white-space:pre">	</span>arr[0]=1;
<span style="white-space:pre">	</span>arr[1]=2;
<span style="white-space:pre">	</span>arr[2]=3;
<span style="white-space:pre">	</span>arr[3]=4;
<span style="white-space:pre">	</span>arr[4]=5;

        动态初始化时,如果不为数组中的元素赋值,则会对应其数据类型生成相应的初始值,跟类的成员变量的默认值一样,布尔类型默认为False,引用类型默认为null,其他类型默认为0。

        无论是静态初始化还是动态初始化,初始化时都必须指定数组的长度。

数组的引用

        定义数组并为其分配了空间后,就可以引用数组中的每个元素了,引用方式为:arr[index]

        arr为数组变量名,index为数组下标,其值可以为整型常数或者表达式长度为n的数组下标的范围为0~n-1。如当定义了一个长度为n的数组a时,a[4]就代表这个数组中的第5个数,即a[n-1]中存储的是数组a中的第n个数据。

        此外,Java中每个数组都有一个length属性指明数组的长度,如a.length的值就是数组a的长度。

        举例说明 

☆ 定义一个整型数组

<pre name="code" class="java" style="font-size: 18px;">public class ArrayTest {
	public static void main(String[] args) {
		int arr[]=new int[3];
		arr[0]=1;
		arr[1]=2;
		arr[2]=3;
                arr[3]=4;
	}
}

        代码中定义arr的内存变化与上文定义数组的内存图变化一样,最后为arr中的四个单元赋值后的结果为:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏企鹅号快讯

Python基础知识3:re正则表达式

正则表达式(或RE)是一种小型的、高度专业化的编程语言,内嵌在Python中,仅做字符的匹配。 1、字符类型: 普通字符和元字符; 1)普通字符:大多数的字符和...

2037
来自专栏我和PYTHON有个约会

10.程序编程基础4~变量&运算符

3.3 变量部分 3.4 运算符部分;主要讲解:赋值运算符、算数运算符、关系运算符、逻辑运算符、成员运算符、标识运算符

671
来自专栏水击三千

JavaScript对象和数组

在JavaScript中对象是一种数据结构,用于将数据和功能组织在一起,描述一类对象所具有的属性和方法。 对象是某个特定类型的实例。新对象是new操作符后跟一个...

2637
来自专栏有趣的django

2.python数据类型

字符串(string) 1.字符串常用功能 name = 'derek' print(name.capitalize()) #首字母大写 Derek ...

2975
来自专栏菩提树下的杨过

ruby学习笔记(2)--类的基本使用

ruby语言跟c#的一些重要差别在于: 1.ruby是动态语言,c#是静态语言--即对象在new出来以后,ruby还可以动态给对象实例添加一些属性或方法(jav...

1896
来自专栏Python疯子

python列表,字典排序使用小知识点

1417
来自专栏Python小屋

Python内置函数sorted()从入门到精通

Python内置函数sorted()可以对列表、元组、字典、集合、字符串、range对象以及其他可迭代对象进行排序,返回排序后的列表,支持使用key参数指定排序...

28110
来自专栏WindCoder

Java漫谈-数组

在Java语言中,数组是对象(An object is a class instance or an array.),而且是动态创建的。

1751
来自专栏赵俊的Java专栏

Python 基础语法

1925
来自专栏编程理解

正则表达式(一):常用元字符

正则表达式是一种字符串模式,用来对某些规则的文本内容进行处理。利用字符串构成成的数据结构,来完成对文本内容的匹配。

2185

扫码关注云+社区

领取腾讯云代金券