Object类中的方法
API(Application Programming Interface)
1.API
- 应用程序编程接口
2.Java API
- 就是Java提供给我们使用的类,这些类将底层的实现封装了起来
- 我们不需要关心这些类是如何实现的,只需要学习这些类如何使用
Object类
1.Object类的概述
- 类层次结构的根类
- 所有类都直接或者间接的继承自该类
2.构造方法
- public Object()
- 子类的构造方法默认访问的是父类的无参构造方法
HashCode()方法
1方法声明
- public int hashcode()
2.返回值
- 返回该对象的哈希码值,默认情况下,该方法会根据对象的地址来计算
3.说明
- 不同对象的hashcode()一般来说不会相同。但是,同一个对象的hashcode()值肯定相同
- 不是对象的实际地址值,可以理解为逻辑地址值
4.方法
public native int hashCode();
案例分析
public class Demo2_HashCode {
public static void main(String[] args) {
Object obj1 = new Object();
int HashCode = obj1.hashCode();
System.out.println(HashCode); //哈希码值:2055281021
}
}
GetClass()方法
1方法声明
- public final Class getClass()
2.返回值
- 返回此Object的运行时类
3.说明
- 可以通过Class类中的一个方法,获取对象的真实的全名称
- public String getName()
4.方法
public final native Class<?> getClass();
案例分析
import Student.Student;
public class Demo3_GetClass {
public static void main(String[] args) {
Student s = new Student("张三",23);
Class clazz = s.getClass(); //获取该对象的字节码文件
String name = clazz.getName();
System.out.println(name); //Student.Student(对象的全名称)
}
}
ToString()方法
1.方法声明
- public String toString()
2.返回值
- 返回该对象的字符串表示
3.说明
- 他的值等于: getClass().getName() + “@” + Integer.toHexString(hashCode())
左边:类名
中间:@
右边:字节码的十六进制表示
这么写没有什么实际意义
- 由于默认情况下的数据对我们来说没有意义,一般建议重写该方法
自动生成重写方法
Ctrl + Alt + s
4.方法
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
案例分析
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
public class Demo4_ToString {
public static void main(String[] args) {
Student s = new Student("张三",23);
/*
String str = s.toString();
System.out.println(str);
*/
System.out.println(s.toString());
System.out.println(s); //如果直接打印队象的引用,会默认调用toString方法
System.out.println("我的名字是:" + s.getName() +"," + "我的年龄是:" + s.getAge());
/*
Student [name=张三, age=23]
Student [name=张三, age=23]
我的名字是:张三,我的年龄是:23
*/
}
}
5.补充
- toString方法的作用:可以更方便的显示属性值
- getXxx方法是为了获取值,可以显示也可以赋值,或作其他操作
Equals()方法
1.方法声明
- public boolean equals(Object obj)
2.返回值
- 布尔类型
3.说明
- 默认情况下比较的是对象的引用是否相等
- 由于比较对象的引用没有意义,一般建议重写该方法
4.方法
public boolean equals(Object obj) {
return (this == obj);
}
案例分析
@Override
public boolean equals(Object obj) {
Student s = (Student)obj;
return this.name.equals(s.name) && this.age == s.age;
}
public class Demo5_Equals {
public static void main(String[] args) {
Student s1 = new Student("张三",23);
Student s2 = new Student("张三",23);
boolean b = s1.equals(s2); //比较两个对象是否相等(地址值)
System.out.println(s1 == s2); //比较地址值
System.out.println(b); //重写后比较的是属性值
}
}
5.==号和equals方法的区别
a:共同点
- 都可以做比较,返回值都是Boolean
b:区别
- ==号是比较运算符,既可以比较基本数据类型,也可以比较引用数据类型,基本数据类型比较的是值,引用数据类型比较的是地址值
- equals方法只能比较的是引用数据类型,equals方法在没重写之前比较的是地址值,底层依赖的是== 号,但是比较地址值是,没有意义的,
我们需要重写equals方法比较对象中的属性值