Object类:
Object类要么默认继承Object类,要么简接继承Object类,Object类是祖宗类;
Object类的方法一切子类都可使用;
Object类常用方法:
toString:
父类toString方法存在的意义是为了被子类重写,以便返回对象内容信息
package wryyyyy;
public class Student
{
private String name;
private char sex;
private int age;
public Student(String name, char sex, int age) {
this.name = name;
this.sex = sex;
this.age = age;
}
public Student() {
}
@Override
public String toString()
{
return "Student {name=" + name + ",sex" + sex + ",age=" + age +"}";
}
}
package wryyyyy;
public class Test
{
public static void main(String[] args)
{
Student s = new Student("小王",'男',19);
String rs = s.toString();
System.out.println(rs);//wryyyyy.Student@776ec8df 默认打出当前对象在堆内存中的地址
System.out.println(s.toString());//toString可以不写
}
}
equals:
父类equals方法存在的意义是为了被子类重写,以便返回子类自己制定比较规则
package wryyyyy;
public class Test
{
public static void main(String[] args)
{
Student s1 = new Student("小王",'男',19);
Student s2 = new Student("小王",'男',19);
System.out.println(s1.equals(s2));//equals默认比较两个对象地址是否相同
}
}
重写后equals比较内容,==比较地址:
@Override
public boolean equals(Object o)//用Object可以兼容与所有对象进行比较,不仅仅是学生对象
{
//先判断o是不是学生类型
if(o instanceof Student)//判断o的真实类型
{
//判断两个对象内容是否一样
if(this.name.equals(((Student) o).name) && this.sex==((Student) o).sex && this.age==((Student) o).age)
/*
* 字符串用equals 不用==
* o要进行类型转换,否则o作为父类无法访问
* */
{
return true;
}
//或者直接写成:
//return this.name.equals(((Student) o).name) && this.sex==((Student) o).sex && this.age==((Student) o).age;
}
else//如果o不是学生类型(包括o是空类型)
{
return false;
}
}
Objects:
更安全
package wryyyyy;
import java.util.Objects;
public class Test
{
public static void main(String[] args)
{
String s1 = null;
String s2 = "teacher";
//System.out.println(s1.equals(s2));//比较内容,返回true
//可能出现空值异常
System.out.println(Objects.equals(s1, s2));
//这个更安全
}
}
System.out.println(Objects.isNull(s1));//true
StringBuilder:
构造器:
常用方法:
StringBuilder sb = new StringBuilder();
sb.append("a");
sb.append("b");
sb.append("c");
sb.append(1);
sb.append(false);
sb.append(3.3);
sb.append("qwer");
System.out.println(sb);//输出的不是地址,说明已经进行了重写
StringBuilder链式编程
StringBuilder sb1 = new StringBuilder();
sb1.append("a").append("b").append("c");//拼完之后又返回原对象,所以继续拼
System.out.println(sb1);
反转内容
sb1.reverse().append("d");//反转之后还会返回这个对象
System.out.println(sb1);
取长度:
System.out.println(sb1.length());
StringBuilder只是手段,最终的目的还是要恢复成String
String rs = sb1.toString();
String效率低的原因:
每次拼接都会产生新对象,不断占新对象的空间
每写一个+,都new一个StringBuilder,拼完后打出String对象
StringBuilder只在堆内存中产生一个对象