一、包装类
1. 基本数据类型
boolean,byte,char,short,int,long,float,double
2. 对应包装类
Boolean,Byte,Character,Short,Integer,Long,Float,Double
3. 装箱与拆箱
- 装箱:将一个字面常量赋值给一个包装类型,编译时会被解读为valueOf
- 拆箱:当与基本数据类型做比较或者发生运算时会调用xxxValue方法,xxx为对应的基本数据类型
4. 缓存机制
整数类型数据均有缓存机制,如果在该范围内从缓存数组取出,不会实例化新的对象,默认范围-128~127
- Integer缓存上限可变
- Character缓存范围:0~127
二、字符串
1. 字符串类型
公共接口:CharSequence
2. 效率比较
String < StringBuffer < StringBuilder
- String通过定长字符数组实现
- StringBuffer和StringBuilder在缓冲区操作
3. 字符串拼接
- 使用加号拼接
效率最低,相当于调用StringBuilder的append方法,返回一个新的对象,在进行字符串比较时,不会相等
- valueOf方法
传入参数,返回一个字符串类型
4. 字符串常用方法
- 字符查找-封装查找所有字符位置的方法
/**
* 递归查找字符串中出现某一个字符的所有位置
* @param s 原字符串
* @param c 待查找字符
* @param fromIndex 起始查找位置
*/
public static void find(String s,char c,int fromIndex) {
// 找到->继续向后搜索
// 找不到->搜索结束
int index = s.indexOf(c, fromIndex);
// 第一次查找并且没有找到
if (fromIndex == 0 && index == -1) {
System.out.println("该字符串中没有该字符");
return;
}
if (index == -1) {
System.out.println("查找结束");
}else {
if (fromIndex == 0) {
System.out.println("开始查找");
}
System.out.println(index);
// 递归调用,继续下一次查找
find(s, c, index + 1);
}
}
- 字符串分割-嵌套结构
// 分割句子,得到每一个单词
String s1 = "good good study,day day up";
// s1.split(",") -> 将字符串以逗号分割,得到两个子句
// sentence -> 每次循环取出的数组中的元素(分割得到的子句)
for (String sentence : s1.split(",")) {
// sentence.split(" ") -> 对于每个句子再次通过空格分割
for (String word : sentence.split(" ")) {
// word -> 循环取出分割后得到的单词
System.out.println(word);
}
}
- 字符串比较-注意事项
通常为避免空指针异常,会将字面常量放在前面的位置,并且对判断结果不会产生影响