Object 类API
(接口不继承Object)
equals 方法 比较内存地址
public static void main(String[] args) {
Person p1 = new Person("李四", 20);
Person p2 = new Person("张三", 25);
System.out.println(p1.equals(p2)); // false
}
重新父类方法
两个对象比较地址没什么意义,一般都是false
因此常用来重写为有意义的比较
重写的时候,需要关注类型多态的转型!!
public boolean equals (Object obj) {
if(obj != null && obj instanceof Person) {
Person p = (Person) obj;
return this.name == p.name;
}
return false;
}
toString 方法
输出语句中,打印一个对象,其实是调用toString方法
默认是输出对象的内存地址
public static void main(String[] args) {
Person p1 = new Person("李四", 20);
System.out.println(p1);
System.out.println(p1.toString());
}
重写toString方法
public String toString() {
return 'name: ' + this.name + ' age: ' + this.age;
}
String 类
在java中,所有的字符串字面量都是String类的对象
重写过toString
字符串是一个常量,一旦创建,不可更改
public final class String
implements java.io.Serializable, Comparable<String>, CharSeqence {
private final char value[];
private int hash;
// ....
}
String 的创建和比较
String str1 = new String("abc");
String str2 = "abc";
System.out.println(str1==str2); // false
System.out.println(str1.equals(str2)); // true
String(byte[] byte)
通过使用平台默认字符解码指定的byte数组,构造新的String
- 平台: 机器的操作系统
- 默认字符集 默认编码表 GBK
- byte 范围 -127 ~ 128
- 正值则查ASCII表,负数就编码汉字,一个汉字两个字节表示
byte[] bytes = {-97,-98,-99,-100}; // 必须成对出现,否则就是一个问号?
String s = new String(bytes);
String(byte[] bytes, int offset, int length)
字节数组的一部分转为字符串
offset 起始索引(偏移量), length 长度
String(char[] value)
将char数组转为字符串
String(char[] value, int offset, int count)
将char数组一部分转为字符串
常用方法
length()
substring(int beginIndex)
substring(int beginIndex,int endIndex)
截取字符串 返回新的字符串
包含头不包含尾
startsWith(String prefix)
endsWith(String suffix)
测试此字符串是否以该字符串开始(是否为前缀)返回boolean
测试此字符串是否以该字符串结束(是否为后缀)返回boolean
contains(String s)
判断一个字符串是否包含另一个字符串
indexOf(char ch)
查找一个字符在字符串中第一次出现的索引,不存在则返回-1
getBytes()
将字符串转为字节数组返回
toCharArray()
将字符串转为字符数组
boolean equalsIgnoreCase(String s)
判断两个字符串是否相同,忽略大小写
charAt()
获取字符串索引值
StringBuffer 线程安全的可变字符串
StringBuilder 可变字符串
提高字符串的操作效率
内部采用可变字符数组数组,不带final
StringBuilder 是 StringBuffer 兼容类,拥有同样的API StringBuilder 线程不安全,效率更高
常用的如下几个API
append: 接受任意类型的数据(重载)追加,返回仍是StringBuffer(方法调用链)
delete(int start, int end) 删除[a,b) 区间类的字符
清除所有字符 delete(0, buffer.length());
insert(int index, 任意类型) 任意类型的数组插入到index位置
往最后追加 index== length()
replace(int start, int end, String str) [a,b)范围内替换为str
不一定要求str和范围长度一样
reverse 翻转字符串
toString 转换为String对象 重写toString方法