4.5 字符串与数组
4.5.1 new String(“abc”) 创建一个或者两个 常量区及堆区 要看原先常量区是否有原先有“abc”字符串
4.5.2
- == 判断两个变量值是否相等 不适合判断对象 适合判断基本类型或引用
- equals object对象提供的方法判断内容是否相等
- hashCode 将地址转换成int
public boolean equals(Object anObject){
if(this==anObject){
return true;
}
if(anObject instanceof String){
String anotherString = (String)anObject;
int n = value.length;
if(n == anotherString.value.length){
char v1[] = value;
char v2[] = anotherString.value;
int i=0;
while(n--!=0){
if(v1[i]!=v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
4.5.3
- Character 用于单个字符串
- String
-
- 值不可变
- 可以直接赋值初始化也可以构造函数初始化
- 修改值时会调用StringBuffer方法
- 由于值不可变(常量)所以线程安全
- StringBuffer (字符串缓存区)
-
- 值可变
- 只能构造函数初始化
- 线程安全 (使用synchronized同步)
- StringBuilder
-
- 与StringBuffer相似
- 但线程不安全
4.5.4 数组是对象 有属性(length)及方法(clone)可调用
4.5.5数组声明及初始化
- 声明 type[] arrayName 或 type arrayName[] (不推荐)
- 数组创建后会有初始值
- 声明之后不会分配内存
- arrayName = new type[arraySize] 分配内存的方法
- 初始化方法 int[] a = new int[5] 或者 int[] a = {1,2,3,4,5}
- 也可以分开写
-
- int[] a; a = new int[5];
- int[] a ; a = new int[]{1,2,3,4,5};
- 二维数组
-
- 可以 int[][] a = new int[2][]; 数组内可变长度
- a[0] = new int[]{1,2,3};
- a[1] = new int[]{1};
4.5.6
- StringName.length() 获取字符串的长度
- arrayName.length 获取数组长度
- size 计算对象大小