Object类的概述
Object类的概述
类层次结构的根类
所有类都直接或者间接的继承自该类
构造方法
public Object()
子类的构造方法默认访问的是父类的无参构造方法—因为object类只有空参构造方法
Object类的hashCode()方法
public int hashCode()
a:返回该对象的哈希码值。默认情况下,该方法会根据对象的地址值来计算。
b:不同对象的,hashCode()一般来说不会相同。但是,同一个对象的hashCode()值肯定相同。
hashCode()是个抽象方法,用native(本地)修饰符修饰是借助本地系统资源帮我们计算的hashCode值,现在jvm是在window系统中运行的,就会借助window系统计算hashCode值
案例:
- package com.itkailing.object;
- import com.itkailing.bean.Student;
- public class Demo1_HashCode {
- public static void main(String[] args) {
- // 创建Object类型的对象object
- Object object = new Object();
- int hashCode = object.hashCode();
- System.out.println(hashCode);
- Student s1 = new Student("张三", 23);
- Student s2 = new Student("李四", 24);
- System.out.println(s1);
- System.out.println(s2);
- }
- }
Object类的getClass()方法
public final Class getClass()
a:返回此对象的运行时类。
b:可以通过Class类(小写的class是关键字.C大写的Class是个类)中的一个方法,获取对象的真实类的全名称。 (返回Class,用Class接受) Class clazz=s.getC =]=lass();
public String getName()
小写的class是用来描述类的信息的(属性和行为)
大写的Class是用来描述编译后生成的字节码文件的(.class文件)
Object类的toString()方法
public String toString()
a:返回该对象的字符串表示。
b:它的值等于:
getClass().getName() + "@" + Integer.toHexString(hashCode())
查看源码如下
- 源码如下:
- public String toString() {
- return getClass().getName() + "@" + Integer.toHexString(hashCode());
- }
通过源码看出,返回的结果:
@符号前是给对象所属类的全名称,
@符号后面是该对象hashCode值的十六进制的字符串表现形式
即: 全类名 @ 该对象hashCode值的十六进制的字符串表现形式
注: System.out.println(student); //直接打印对象的引用,默认调用toString方法
重写toString()方法
在实际使用时直接打印出类全名称@ hashCode值的十六进制的字符串表现形式,是没有意义的,经常我们是想看到对象的具体的详细信息,这样就需要子类重写父类的toString方法
- public String toString() {
- return "Student [name=" + name + ", age=" + age + "]";
- }
- }
注:eclipse自动生成,alt+shift+s ->s->enter
Object类的equals()方法
a:指示其他某个对象是否与此对象"相等"(判断两个对象是否相等)。
b:默认情况下比较的是对象的引用是否相同。
c:由于比较对象的引用没有意义,一般建议重写该方法。
查看源码
- 源码
- public boolean equals(Object obj) {
- return (this == obj);//是调用的对象与传入的对象的比较,比较的是地址值
- }
- 底层还是==号
案例:
- import com.itkailing.bean.Student;
- public class Demo4_Equals {
- public static void main(String[] args) {
- //观察重写equals方法前后的结果
- Student s1 = new Student("张三",23);
- Student s2 = new Student("张三",23);
- //当Student类没有重写equals方式时,下面两个输出都是false
- boolean b = s1.equals(s2); //比较两个对象是否相等
- System.out.println(s1 == s2);
- System.out.println(b);
- }
- }
重写Student类中的equals方法:
- @Override
- 重写equals方法
- public boolean equals(Object obj) {
- if(obj instanceof Student){
- Student s = (Student)obj;
- return this.name.equals(s.name)&&this.age==s.age;
- }
- return false;
- }
- }
==号和equals方法的区别
==是一个比较运算符号,既可以比较基本数据类型,也可以比较引用数据类型,基本数据类型比较的是值,引用数据类型比较的是地址值
equals方法是一个方法,只能比较引用数据类型,所有的对象都会继承Object类中的方法,如果没有重写Object类中的equals方法,equals方法和==号比较引用数据类型无区别,重写后的equals方法比较的是对象中的属性
equals底层依赖的是==号

浙公网安备 33010602011771号