1、toString()方法
1.1 作用
返回一个对象默认的字符串形式
public class Object{
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode()); }
}
1.2 子类可以重写toString()方法
public class Student{
private String name;
private int age;
//get方法
//set方法
public String toString() {
return "Student[name="+name+",age="+age+"]";
}
}
1.3 toString方法的调用
public static void main(String[] args){
Student stu = new Student();
//这个俩个输出语句的效果是一样的
System.out.println(stu);
System.out.println(stu.toString());
}
注意:默认情况下println方法会调用这个对象的toString方法
推荐使用第一种,因为当stu的值为null时,第二种输出方式会报错,空指针异常
2、getClass方法
该方法可以返会指向对象具体是什么类型的,该方法是被native修饰的本地方法,不是java实现的,子类不能重写getClass()方法,所以调用的一定是Object中的getClass方法
public void test(Object obj){
syso(obj.getClass()); //获取创建obj对象是属于哪个类的
}
3、equals方法
作用:比较两个对象是否相等
public class Object{
public boolean equals(Object obj) {
return (this == obj);
}
}
可以看出,Object中的equals方法,是直接使用的==号进行的比较,比较俩个对象的地址值是否相等
如:
public static void main(String[] args){
Student o1 = new Student();
Student o2 = new Student();
boolean f = o1.equals(o2);
System.out.println(f); //false
}
子类对equals方法重写后
public class Student {
private String name;
private int age;
public Student(){}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object obj) {
//如果obj为null,直接返回false
if(obj == null){
return false;
}
//如果obj和this的地址值相等,直接返回true
if(this == obj){
return true;
}
//如果obj不属于Student类型的对象,直接返回false
if(!(obj instanceof Student)){
return false;
}
//obj属于Student类型的对象,做类型强制转换
Student other = (Student) obj;
//如果obj的name和age分别等于this的name和age,直接返回true
if(this.name.equals(other.name) && this.age==other.age){
return true;
}
//其他情况,直接返回false
return false;
}
}
class StudentTest{
public static void main(String[] args) {
Student s1 = new Student("tom",20);
Student s2 = new Student("tom",20);
System.out.println(s1 == s2);//输出false,因为俩对象的内存地址不同
System.out.println(s1.equals(s2));//输出true,因为重写了equals的比较规则,name和age相等就算俩对象相等 }
}
与“==”做比较
==
(1)基本类型:比较的是字面值
(2)引用数据类型:比较的是地址值
equals
(1)直接继承自父类,用法和==一样
(2)重写父类中的equals方法,将按照重写后的规则比较
4、hashCode方法
返回一个int值,该int值是JVM根据对象在内存的中的特征(地址值),通过hash算法计算出的一个结果。
Object中的hashCode方法默认返回的是对象的内存地址,但是实际上可能并不是。
对于俩个对象的hashCode值:
(1)相等的俩个对象,hashCode值一定相等
(2)hashCode值相同,俩个对象有可能相等,也可能不同等
(3)hashCode值不同,俩个对象一定不同