一、数组
定义:相同数据类型的元素按照一定顺序排列的集合。
(java中数组元素可以是简单数据类型,也可以是对象)
特点:数组中各元素是有先后顺序的,在内存中按照这个先后顺序连续存放在一起。
1. 内存
(1)栈内存:定义的基本类型的变量和对象的引用变量,超出作用域将自动释放(如函数的执行)
(2)堆内存:存放由 new 运算符创建的对象和数组,由Java虚拟机的自动垃圾回收器来管理。
2.栈
特点:(1)先进后出,后进先出 (队列:先进先出,后进后出)
(2)栈是一种运算受限的线性表,仅限在表尾进行插入和删除操作。
(3)存储速度比堆快
(4)栈中的数据大小与生存期必须是确定的,缺乏灵活性
(5)主要存放一些基本类型的变量(如int float char boolean等)和对象句柄
(Java的堆与数据结构不同,但Java中的栈与数据结构类似)
3.数组与对象存放于堆内存
(1) 由 new 命令创建,堆内存中的对象和数组只能由栈内存中的引用变量来访问,引用相当于是指针。
(2) 数组和对象在没有引用变量指向它的时候,变成垃圾,不被使用,但占内存,随后不确定的时间
由Java虚拟机垃圾回收器来自动回收。
(引用变量占一定的空间,它的字节数取决于Java虚拟机的位数,32位 = 4个字节,64位 = 8个字节)
二、一维数组
1.
2.动态内存分配说明:
(1)用 new 分配内存的同时,数组的每个元素都会自动赋默认值
(2)
3.静态内存分配:
若在声明数组时进行赋值(初始化)称为静态内存分配。
(在Java程序中声明数组时,无论用何种方式定义数组,都不能指定其长度)
4.访问
引用方式: 数组名[下标]
与C/C++不同, java对数组元素访问要进行越界检查。
越界保护:若访问数组时下标越界,则扔出异常。
5.用x.length指出数组x所包含的元素个数。 数组属性有length
用str.length()指出字符串str所包含的元素个数。 字符串方法有length()
6.遍历
(1)循环结构
(2)foreach遍历
for (type element : array){ ... }
三、多维数组
1.Java中没有真正的多维数组,只是数组的数组。
2.分配内存时,必须指明行和列的个数。
3.C语言的二维数组一定呈矩形,m行n列,开辟连续的(m*n)个储存空间
Java语言的二维数组不一定呈矩形
4.得到二维数组的维数:
得到某数组的行数: 数组名.length
得到某数组某行元素的个数: 数组名[下标].length
(二维数组申请内存时必须指定高层维数)
5.二维数组是一个特殊的一维数组,它的每个元素都是一个一维数组。
四、字符串
1.用一对双引号 “ ” 括起来的字符序列
2.Java语言中,字符串常量或变量均用类实现。
---不属于基本数据类型
---所有字符串均为对象
3.字符串变量的创建:
(1)String 变量名;
变量名 = new String(" 字符串");
(2)String 变量名 = new String(" 字符串 "); //使用new,一定会在堆内创建新的对象(不论原来是否存在)
(3)String 变量名 = “ 字符串 ”;
4.字符串是引用型变量,存储方式与数组基本相同。
5.字符串的比较:
由于字符串是对象,所以使用 == 符号实际上比较的是对象的地址。
---若两个字符串引用均指向同一块地址,其内容必然相等。
---但是无法比较存储在不同区域,但内容实际可能相等的串
因此,比较字符串内容应调用 String 类的 equals 方法。
6.字符串的拼接
使用 + 操作符进行字符串拼接效率低下。
在性能要求较高的场景下应优先使用StringBuilder 类方法进行拼接操作。