Java-Object
java当中最顶层的一个类,我们写的所有的类,默认都会继承Object类
1) toString():用来描述当前对象的信息,但是sun建议我们设计新的类,最好能重写该方法
默认情况下:返回是包名+类名@+十六进制字符串
输出对象的时候,默认调用toString方法
public class Test1 { public static void main(String[] args) { User user=new User(); System.out.println(user.toString()); } } class User{ //重写User从Object中继承过来toString方法 public String toString(){ String name="User类的对象"; return name; } }
public class Test1 { public static void main(String[] args) { Teacher teacher=new Teacher("张",5000,"男"); System.out.println(teacher); } } class Teacher{ String name; double salary; String sex; Teacher(String name,double salary,String sex){ this.name=name; this.salary=salary; this.sex=sex; } public String toString(){ String message="Teacher类的对象名字是:"+name+"工资是:"+salary+"性别是:"+sex; return message; } }
2) hashcode()
返回值就是该对象在内存中地址转化以后的一个数字
sun规定:如果判断一个类的两个对象,如果相等,两个对象hashcode(),返回值,必须一致
如果我们要对对象是否相等,进行判断的话,首先必须要重写hashcode()
public class Test1 { public static void main(String[] args) { Student student=new Student(); System.out.println(student.hashCode());//结果:2018699554 } } class Student extends Object{ }
3) equals()
1. ==:相等
基本数据类型:“==”-->相等,eg:1==1
引用数据类型:“==”-->两个对象的物理地址相同(同一个对象)
2. 引用数据类型如何判断两个对象是否相等?
equals():返回值是false,不相等,如果返回值是true,相等
3. sun公司建议:如果需要判断两个对象是否相等,则必须重写hashcode()方法和equals()方法
hashcode():只要对象相等,hashcode()方法返回值,也必然相等
equals():首先是要比较的对象是否为null,任何对象跟null,永远都是不相等的,使用返回值是false
其次判断要比较的两个对象的地址是否相等,如果地址相等,则必然是同一个对象,返回值是true
之后判断要比较的两个对象的类是否一致,只有同一个类型的两个对象,才可以比较
对象 instanceof 类型:如果该对象是类型的一个对象,则结果为true,反正false
最后由我们自己来指定比较的规则,一般是判断其某些属性的值是否一致
public class Test1 { public static void main(String[] args) { Student1 s1=new Student1("刘",12); Student1 s2=new Student1("刘",12); //"==":(引用类型)用来判断两个对象的地址是否一致 //s1是一个单独的对象,应该属于s1的地址 //s2也是一个单独的对象,也有属于s2的地址 //两个不同的对象,地址必然不同,同一个地址只能有一个对象 System.out.println("s1==s2"+(s1==s2));//结果:s1==s2false System.out.println(s1.hashCode());//结果:12 System.out.println(s2.hashCode());//结果:12 //equals():默认是用"=="来比较两个对象是否相等 boolean flag=s1.equals(s2); System.out.println(flag);//结果:true //sun建议:引用类型对象比较是否相等,必须要重写hashcode()(只需要保证两个对象如果相等,该方法返回值一致即可) //equals()(由程序员自己来指定两个对象相等的规则) Student1 stu1=new Student1("刘",55); Student1 stu2=new Student1("刘",66); Student1 stu3=new Student1("刘",66); System.out.println("stu1和stu2是否相等"+stu1.equals(stu2));//结果:stu1和stu2是否相等false System.out.println("stu2和stu3是否相等"+stu2.equals(stu3));//结果:stu2和stu3是否相等true System.out.println("stu1和null是否相等"+stu1.equals(null));//结果:stu1和null是否相等false System.out.println("stu1跟自己是否相等"+stu1.equals(stu1));//结果:stu1跟自己是否相等true } } class Student1{ String name; int age; Student1(String name,int age){ this.name=name; this.age=age; } public int hashCode() { //重写hashcode() return age; } public boolean equals(Object obj) { //重写equals() //obj:要比较的对象 if(obj==null){ //null return false; } if(this==obj){ //(this:当前的对象),是否是同一个对象 return true; } if(obj instanceof Student1){ //同一类型(对象 instanceof 类型:判断对象是否属于该类型) //由我们自己来设置,只要name属性和age属性的值一致,就认为是相等的 //把obj转化为Student类型 Student1 stu=(Student1)obj; if(this.name.equals(stu.name)&&this.age==stu.age){ return true; } } return false; } }