数组的定义
数组是相同类型数据的有序集合。数组描述的是相同类型的若干数据。按照一定的先后次序排列组合。其中每一个数据称为元素,每个元素都可以通过数组的索引或者下标(角标)来定位。
数组的特点
1 数组本身是引用数据类型,而数组中的元素可以使任意类型(基本类型/引用类型)
2 创建数组对象会在内存中开辟一块空间,他的空间是连续的。而数组名中引用的是这块连续空间的首地址。
3 数组的长度一但确定 就不能修改。
4 数组中存储的数据的类型必须是相同的 不能出现混合类型
数组的分类
维度: 一维数组 二维数组 三维数组 多维数组…
数据类型: 基本类型的数组(整形数组 浮点型数组 字符型数组 布尔型数组) 引用类型的数组
数组的创建和初始化
格式一: 数据类型[] 变量名 int[] arr; 定义了一个int类型的一维数组 数组名称为arr (掌握)
格式二: 数据类型 变量名[] int arr[]
数组的初始化:
java中的数组必须先初始化,然后才能使用。
所谓初始化:就是为数组中的元素分配内存空间,并为每一个元素赋值
数组的初始化方式
- 静态初始化
- 动态初始化
静态初始化:在定义数组的同时就位数组元素分配空间并赋值
数据类型[] 变量名 = new 数据类型[]{数据1,数据2,数据3,...,数据n}
此时在声明数组的时候 不需要的指定长度系统会根据给出的数据自动分配长度
简化:
数据类型[] 变量名 = {数据1,数据2,数据3,...,数据n}
动态初始化:
数组声明和数组元素的分配空间及赋值分开进行。
格式: 数据类型[] 变量名 = new 数据类型[数组的长度]
int[] arr = new int[5] 表示声明了一个长度为5的整型数组
动态初始化:
数组声明和数组元素的分配空间及赋值分开进行。
格式: 数据类型[] 变量名 = new 数据类型[数组的长度]
等号的左边:
int 数组的类型
[] 表示这是一个数组
arr 是这个数组的名称
等号的右边:
new: 为数组开辟内存空间
int 数组的数据类型 制定了数组中每个元素的空间大小
[] 表明这是一个数组
5 表示数组的长度
数组元素 即使我们没有赋值 每个元素都存在一个默认的值
数组的默认值
byte shot int 默认值是 0
long类型的默认值0L
float double 默认值是0.0
char类型的默认值他是"\u0000"
boolean 类型为false
String为代表的引用类型为null
多维数组
多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组,例如:
String str[][] = new String[3][4];
多维数组的动态初始化(以二维数组为例)
直接为每一维分配空间,格式如下:
type[][] typeName = new type[typeLength1][typeLength2];
type 可以为基本数据类型和复合数据类型,typeLength1 和 typeLength2 必须为正整数,typeLength1 为行数,typeLength2 为列数。
例如:
int a[][] = new int[2][3];
在Java中 二维数组 不必恃规则的矩阵形式。(与c语言不一样)
字符串
字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。
创建字符串
创建字符串最简单的方式如下:
String str = "Runoob";
在代码中遇到字符串常量时,这里的值是 “Runoob”",编译器会使用该值创建一个 String 对象。
和其它对象一样,可以使用关键字和构造方法来创建 String 对象。
用构造函数创建字符串:
String str2=new String("Runoob");
String 创建的字符串存储在公共池中,而 new 创建的字符串对象在堆上:
String s1 = "Runoob"; // String 直接创建
String s2 = "Runoob"; // String 直接创建
String s3 = s1; // 相同引用
String s4 = new String("Runoob"); // String 对象创建
String s5 = new String("Runoob"); // String 对象创建
图示:
所以String 类是不可改变的,所以你一旦创建了 String 对象,那它的值就无法改变了
有关 String 类支持的方法可见
https://www.runoob.com/java/java-string.html
Java StringBuffer 和 StringBuilder 类
当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。
和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。
在使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,所以如果需要对字符串进行修改推荐使用 StringBuffer。
StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。
由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。