4.16 复习回顾
== 和 equals 的区别
= = : 比较对象时 比较的是”地址值“ 比较 基本数据类型时比较的是 数值
equals: 适用于对象
public void test02(){
Person p = new Person("张三",20);
Person p1 = new Person("张三",20);
boolean equals = p.equals(p1);
System.out.println("equals = " + equals);
}
注意 : 可以重写 equals 方法 重写前比较的还是”地址值“,重写后比较的是 属性 重写快捷键 alt+insert
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age && Objects.equals(name, person.name);
}
String 类 ------字符串
String类 字符串类 位于java.long 包下
特性:
- String 是不可变对象 底层采用 final char[];
- 位于 java.long 使用时不需要导包
- .public final class String 不能有子类
- 只要是双引号内容包裹就是一个字符串对象
- 字符串对象 一旦创建创建成功就不会再开辟额外重复的空间 存在字符串常量池内
如何构建字符串对象?
1." "
2. 拼接
3.方法
4.构造器
String 的方法
1.concat 拼接
public void test() {
String s = "ABC";
String s1 = "牛顿";
// s.concat(s2) 拼接
String s3 = s.concat(s1);
System.out.println(s3);
}
2.equals 比较字符串是否相同 equalsIgnoreCase忽略大小写比较字符串是否相同
public void test02(){
String s = "asdf";
String s1 = "asdf";
boolean equals = s.equals(s1);
System.out.println(equals);
}
boolean b = s.equalsIgnoreCase(s1);
System.out.println(b);
3.compareTo 比较数值(编码值)大小 compareToIgnoreCase 不区分大小写比较大小
s>s1--------输出一个大于0的正整数
s<s1--------输出一个小于0的负整数
s=s1--------输出0
String s = "ABC";
String s1 = "abc";
int i = s.compareTo(s1);
System.out.println("i = " + i);
int i1 = s.compareToIgnoreCase(s1);
System.out.println("i1 = " + i1);
4.trim 去掉字符串两端的空白
public void test04(){
String s= " a b c ";
String s1= " a b c ";
System.out.println("s.trim() = " + s.trim());
System.out.println("s1 = " + s1);
}
5.contains 检验字符串是否 出现过
public void test05(){
String s = "ABCDEF";
boolean cd = s.contains("CD");
System.out.println("cd = " + cd);
// 输出 : ture
}
6.indexOf 返回字符串出现的第一次下标 lastIndeOF 返回字符串最后一次出现的下标
public void test06(){
String s = "ABCDEFADEFGBCD";
int i = s.indexOf("A");
System.out.println("i = " + i); //i = 0
int a = s.lastIndexOf("A");
System.out.println("a = " + a); //a = 6
}
7.isEmpty 判断字符串是否为空 length返回字符串的长度
public void test07(){
String s = "";
boolean empty = s.isEmpty();
System.out.println("empty = " + empty); // empty = true
String s1 = "123456";
int length = s1.length();
System.out.println("length = " + length); // length = 6
}
8.toUpperCase 转为大写 toLowerCase 转为小写
public void test08(){
String s = "asdfASDF";
System.out.println("s.toUpperCase() = " + s.toUpperCase()); // s.toUpperCase() = ASDFASDF
System.out.println("s.toLowerCase() = " + s.toLowerCase()); // s.toLowerCase() = asdfasdf
}
9.substring 截取
范围 左开右闭
public void test09() {
String s = "abcdefg";
System.out.println("s.substring(2) = " + s.substring(2)); //s.substring(2) = cdefg
System.out.println("s.substring(2,5) = " + s.substring(2, 5)); // s.substring(2,5) = cde
}
10.chatAt() 获取字符下标
public void test10(){
String s = "asdfg";
System.out.println(s.charAt(2)); // d
}
}
11. toCharArray 将字符串转为char 数组
public void test11(){
String s = "asdfgh";
System.out.println("s.toCharArray() = " + s.toCharArray()); //s.toCharArray() = [C@5b80350b
}
将数组转为 字符串
char[] arr = {'中','国','你','好'};
String s1 = new String(arr);
System.out.println("s1 = " + s1); //中国你好
12.startsWith 判断是否以字符串开头 endsWith 判断是否以字符串结尾
public void test12(){
String s = "搞搞灯笼天上挂";
System.out.println("s.startsWith("搞搞") = " + s.startsWith("搞")); // ture
System.out.println("s.endsWith("天上挂") = " + s.endsWith("天上挂")); // ture
}
13.raplace 将旧的字符替换为新的字符
public void test13(){
String s= "你是我的眼";
System.out.println(s.replace("的", "大傻瓜")); // 你是我大傻瓜眼
}
14.split 替换
从1 分割 最终形成数组
public void test14(){
String s = "a1b1c1d";
String[] arr = s.split("1");
//Arrays.toString(arr) = [a, b, c, d]
System.out.println("Arrays.toString(arr) = " + Arrays.toString(arr));
}
StringBuilder StringBuffer
拼接多的时候一定要用 这两个 效率很高
StringBuilder,StringBuffer 可变字符对象
char[] value = new char[16];
区别:
同:
1.方法相同
2.有共同的父亲 AbstractStringBuilder
不同:
1.StringBuffer 线程安全 效率低
StringBuilder 线程不安全 效率高
2. StringBuffer jdk1.0
StringBuilder jdk1.5
包装 类型
为什么使用包装类型?
因为某些场景不能使用基本数据类型
泛型
形参是引用类型时 不能传入基本类型数据
包装类型:对基本数据类型的包装
byte Byte
short Short
int Integer
long Long
float Float
double Double
boolean Boolean
char Character
装箱与拆箱
装箱: 将基本数据类型 ---> 包装类型
自动装箱: 直接将基本数据类型的值赋值给包装类型
Integer i = 10; Integer.vauleOf(10);
拆箱:将包装类型 ---> 基本数据类型
自动拆箱: 将包装类型的值赋值给基本数据类型
Integer i1 = new Integer(10);
int m = i1; i1.intValue();
基本数据类型与字符串的转换
基本数据类型---> 字符串
String.valueOf(基本数据类型的值);
字符串---> 基本数据类型
对应的包装类型.parse基本数据类型首字母大写(字符串)
Integer.parseInt()
Double.parseDouble()
Boolean.parseBoolean()
将字符串-->char
"字符串".charAt(下标)
缓冲区
| 包装类 | 缓存对象 |
|---|---|
| Byte | -128~127 |
| Short | -128~127 |
| Integer | -128~127 |
| Long | -128~127 |
| Float | 没有 |
| Double | 没有 |
| Character | 0~127 |
| Boolean | true和false |
整形的缓冲区是 -128---127
浮点型 没有缓冲区
字符型 缓冲区 0 ----127
布尔型缓冲区 true 和 false