一.3常用API第二部分
1.Object类
java.lang.Object * 类 Object 是类层次结构的根(父)类。 * 每个类(包括自定义的类)都使用 Object 作为超(父)类。 * 所有对象(包括数组)都实现这个类的方法。
ToString方法
Person(自己定义的)类默认继承object类,使用可以使用object里的toString方法 * toString() 返回该对象的字符串表示
直接打印对象地址值没有意义,需要重写object类的toString方法(在Person里) 可以alt+insert自动重写或者Code-->Generate
//看一个类是否重写toStrong方法,直接打印这个类的对象即可,如果是地址值就是没有重写,如果不是则重写了toString方法 Random r=new Random(); System.out.println(r);//java.util.Random@74a14482
equals方法
equals(Object obj) 指示其他某个对象是否与此对象“相等”。 equals方法源码: public boolean equaLs (object obj) { return (this ==obj) 参数: object obj: 可以传递任意的对象 ==比较运算符,返回的是一个布尔值true false 基本数据类型:比较的是值 引用数据类型:比价的是两个对象的地址值 this是谁?那个对象调用的方法,方法中的this就是那个对象;p1调用的equals方法 obj是谁?传递过来的参数p2 this==obj -->p1==p2 */ /*object类的equals万法,默认比较的是两个对象的地址值,没有意义 所以我们要重写equals方法,比较两个对象的属性(name, age) 问题: 隐合着一个多态 多态的弊端:无法使用子类特有的内容(属性和方法) object obj=p2=new Person("理论论",8);父类指向子类,无法使用子类的特有内容(性别,年龄) 解决:可以使用向下转型(强转)把obj类型转换为Person*/ 使用: boolean b=p1.equals(p2);此前要把p1,p(赋值)例如 Person p1=new Person("增长率",5); (Person是写好的类) Person p2=new Person("增长率",5);
重写equals时,为了防止出现异常和提高程序效率需要增加几个假设 在此情况下① boolean b=p1.equals(null); 所以在重写equals时增加 //增加一个判断,传递的参数obj如果是null,直接返回false,提高程序的效率 if (obj==null){ return false; } ② 出现 boolean b=s1.equals(s1);为了提高效率,在重写equals时 // 增加一个判断,传递的参数obj如果是this本身,直接返回true,提高程序效率 if (obj==this){ return true; } ③是防止//增加一个判断,防止类型转换错误 使用强转
Object中的Equals方法 String s1="aaa"; //String s2=null; // boolean b=s1.equals(s2);// NullPointerException null是不能调用方法的,会出现空指针异常 所以使用objects类的equals方法:对两个对象进行比较,防止空指针异常 /*public static equals(Object a,Object b){ return (a==b)||(a !=null&& a.equals(b); } 使用: boolean b2= Objects.equals(s1,s2);