Object类
所有类的父类,根基类,以下列举两个常用的方法toString()方法和equals()方法
1. toString方法
toString方法定义
toString:public String toString()返回该对象的字符串表示。通常,toString 方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂的信息表达式。建议所有子类都重写此方法。
Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:
getClass().getName() + ‘@’ + Integer.toHexString(hashCode())
返回:该对象的字符串表示形式。
全限定路径:getClass().getName()
包名+类名的完整表示
hasCode():将对象在堆中的地址进行哈希算法,返回一个码(哈希码),将哈希码传至Integer.toHexString(哈希码)中,返回十六进制的字符串。
public class Test {
public static void main(String[] args) {
int a = 10;
System.out.println(a);
Student s = new Student("飞飞",18,180);
System.out.println(s);//com.test01.ymf03.Student@75412c2f
System.out.println(s.toString());//com.test01.ymf03.Student@50cbc42f
}
}
public class Student {
private String name;
private int age;
private double height;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
public Student(String name, int age, double height) {
this.name = name;
this.age = age;
this.height = height;
}
public Student() {
}
}
toString方法进行重写:
ex:
对toString()方法进行重写:(一般情况子类都需要对父类Object类中的toString()进行重写)
toString()方法IDEA快捷键
alt + insert
2. equals方法
equals()方法:对于引用数据类型来说,比较的是地址值
==:比较左右两侧的值是否相等
父类Object类中的equals()方法,源码逻辑:this == obj ,其实比较的是两个对象具体内容是否相等(对于引用数据类型来说即地址值),所以在子类中需要对equals()方法进行重写。
public class Phone {
private String brand;
private double price;
private int year;
public Phone() {
}
public Phone(String brand, double price, int year) {
this.brand = brand;
this.price = price;
this.year = year;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Phone phone = (Phone) o;
return Double.compare(phone.price, price) == 0 &&
year == phone.year &&
Objects.equals(brand, phone.brand);
}
@Override
public int hashCode() {
return Objects.hash(brand, price, year);
}
}
public class Test {
public static void main(String[] args) {
Phone p1 = new Phone("Huawei",7809.1,2022);
Phone p2 = new Phone("Huawei",7809.1,2022);
System.out.println(p1 == p2 );//false
System.out.println(p1.equals(p2) );//true
}
}
eclipse 和Idea不同集成开发工具生成的equals()方法比较
eclipse:
IDEA:
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Phone phone = (Phone) o;
return Double.compare(phone.price, price) == 0 &&
year == phone.year &&
Objects.equals(brand, phone.brand);
}
补充 : instanceof关键字:
a instanceof b :判断a对象是否是b这个类的实例,如果是返回true ,否则 返回 false