Object
Object是所有类祖类,是Java提供的根类
如果一个类没有显示继承另外一个类的话,该类默认继承Object
所有类都会直接或者间接的继承Object
object中的方法,是所有对象都有的方法
equals
设计目的
为了比较两个对象是否相等,是否是同一个对象
Object中的equals方法
默认比较内存地址,需要我们根据自己的需求进行方法重写,如果两边是引用类型,就会比较内存地址是否相等
两个对象可以是任何东西,但是我们肯定要拿两个对象的有意义属性进行比较,所以这个时候,我们需要将两个对象对应的equals方法进行重写,来满足我们的要求,
除非 你就想知道他们内存地址是否一致
public class Equals_01 {
public static void main(String[] args) {
Equals_01 e = new Equals_01();
Student s1 = new Student(1,"张三");
Student s2 = new Student(2,"李四");
Student s3 = new Student(1,"张三");
System.out.println(s1 == s3);
System.out.println(s1.equals(s3));
System.out.println(s1.equals(s2));
}
}
class Student{
int id;
String name;
public Student(int id,String name) {
this.id = id;
this.name = name;
}
public boolean equals(Object obj) {
//如果内存地址一样,说明是同一个对象,就不用比了,哪哪都一样,直接返回true
if(this == obj) {
return true;
}
//判断obj是否是当前类对象,如果不是,没有可比性,直接返回false
if(obj instanceof Student) {
//能到这里就说明obj是Student类实例化而来2
//向下转型,否则不会访问特有属性
Student s = (Student) obj;
//根据需求做判断即可
if(this.id == s.id&&this.name.equals(s.name)) {
return true;
}
}
return false;
}
}
java中如何比较两个字符串是否相等
在java中比较字符串/引用类型 都是使用equals方法,不能使用 == , == 是比较内存地址的,不是值
任何引用数据类型的比较,最终都会转换为基本数据类型的比较,除非就想知道他们的内存地址是否一致
String中 覆写了equals方法,比较值的大小
public class Equals_02 {
public static void main(String[] args) {
String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(s1 == s2);
System.out.println(s1.equals(s2));
}
}