API:Application Programming Interface 应用程序变成借口
就二十Havana提供给我们使用的类,这些类将底层的实现封装了起来。
一、Object类
类层次结构的根类
所有类都直接或者间接的继承自该类(默认)
二、Object类的hashCode()方法
public int hashCode() //返回的是一个int //public native int hashCode();
作用:返回该对象的哈希码值。默认情况下,该方法会根据对象的地址来计算。
不同对象的,hashCode()一般来说不会相同。但是,同一个对象的hashCode()值肯定相同。
三、Object类的getClass()方法(具体在反射中掌握)
- public final Class getClass() //返回的是一个类 //public final native Class<?> getClass();
注意:小写的class是一个关键字,大写的Class是一个类,是一个描述类的类。这里面也有成员变量和成员方法。
- 作用:返回此对象的运行时类。本质上返回的其实是该的字节码文件,但是是一个类。
补充:它会返回一个你的对象所对应的一个Class的对象,这个返回来的对象保存着你的原对象的类信息,比如你的原对象的类名叫什么,类里有什么方法,字段等。在 高级编程当中用的很多,和反射相关。
四、Object类的toString()方法(需要掌握)
- 源码:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
- 解释:左边得到的是改类的名字,中间:@,右边:哈希地址的十六进制表现形式。类名.静态方法
注意:Integer是.lang的形式,使用时不用导入包。Integer.toHexString()→以十六进制无符号整数形式返回一个整数参数的字符串表示形式。
- 由于默认情况下的数据对我们来说没有意义,一般建议重写该方法。
解释:toString的返回值类型是字符串,所以这里我们可以对toString方法可以进行重写,然后返回一个有用的字符串(可以选择显示属性值),
而getXXX方法是为了获取值,可以显示也可以赋值,或其他操作
实际作用:可以更方便的显示属性值,返回的是字符串。
- 如果直接打印对象的引用,会默认调用toString方法。
Strudent s = new Student(“梅梅”,25); System.out.println(s.toString()); // System.out.println(s);效果相同 Public string toString(){ //对Object方法的toString方法进行了重写。 Return name + ‘,’+age }
五、Object类的equals()方法
- 源码:
public boolean equals(Object obj) {
return (this == obj);
}
- 解释:this是表示当前对象的地址值,与传进来的obj(也是地址值)进行比较。
- 作用:比较两个对象是否相等。比较是两个对象的地址值。没什么意义,需要重写。因为在开发中我们通产比较的是对象中的属性值,我们认为相同属性是同一个对象(其实并不是同一个对象,这里是我们认为),这样就需要对equals方法进行重写。
- 实际应用:比较两个对象的属性值是否相等。
- String类已经重写了object中的equals方法.
- String类的equals方法:比较字符串是否 相等
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
- 结论:如果不重写equals方法,那么所有的类都自动继承Object类的equals方法。
- 当String类调用equals方法时,当二者在栈内存的内容时,直接判断为true;否则,判断该类是否是String的实例,然后进一步比较字符串每个字符是否相等。
六、==号和equals方法的区别
共同点:都可以 做比较,返回值都是布尔类型
区别:
1、==是比较运算符,既可以比较基本数据类型(值),也可以比较引用数据类型(地址值)
2、equals方法在没重写之前比较的是地址值,底层依赖的是==号,但是比较地址值是没有意义的,我们需要重写equals方法比较对象中的属性值。equals方法比较的是引用数据类型(因为对象才能调用方法)。
3、所有的对象都会继承Object类中的方法,如果没有重写Object类中的equals方法,equals方法和==号比较引用数据类型无区别,重写后的equals方法比较的是对象中的属性。
注意:String类的equals方法。