常见对象·Object类
Object类的概述
* A:Object 类概述
* 类层次结构的根类
* 所有类都直接或间接地继承自该类
* B:构造方法
* public Object()
* 回想为什么面向对象中说:
子类的构造方法默认访问的是父类的无参构造
Object类的 hashcode() 方法 (在学集合时掌握)
* A:案例演示
* public int hashCode()
* a:返回该对象的哈希码值,默认情况下,该方法会根据对象的地址值来计算,调用系统的本地资源进行计算
* b:不同对象的 hashCode() 一般来讲不会相同,但是对同一个对象的 hashCode() 值肯定相同
* c:不是对象的实际地址值,可以理解为逻辑地址值
* 举例:物体和编号
packagecom.heima.object;importcom.heima.bean.Student;public classDemo1_HashCode {public static voidmain(String[] args) {
Object obj1= newObject();int hashcode =obj1.hashCode();
System.out.println(hashcode);
Student s1= new Student("张三", 23);
Student s2= new Student("李四", 11); //不同对象的地址不同
System.out.println(s1.hashCode());//ctrl + alt + 下键 向下复制一行
System.out.println(s2.hashCode());
}
}
hashCode() 方法
Object类的 getClass() 方法 (在学反射时掌握)
* A:案例演示
* public final Class getClass()
* a:返回此 Object 对象的运行时类
* b:可以通过 Class 类中的一个方法,获取对象的真是类的全名称
* public String getName()
packagecom.heima.object;importcom.heima.bean.Student;public classDemo2_GetClass {public static voidmain(String[] args) {
Student s= new Student("张三", 18);//Class clazz = new Class();
Class clazz = s.getClass(); //获取该对象的字节码文件
String nameString = clazz.getName(); //获取类名
System.out.println(nameString);
}
}
getClass() 和 getName()
Object类的 toString() 方法
* A:案例演示
* public String toString()
* a:返回该对象的字符串表示
// 默认方法
publicString toString() {return getClass().getName() + "@" +Integer.toHexString(hashCode());
}
* b:它的值等于
* getClass() . getName() + "@" + Integer.toHexString(hashCode())
* c:由于默认状态下的数据对我们来说没有意义,一般建议重写该方法
* B:最终版本
* 自动生成
@OverridepublicString toString() {return "Student [name=" + name + ", age=" + age + "]";
}
Student类 内重写 toString方法
packagecom.heima.object;importcom.heima.bean.Student;public classDemo3_ToString {/** 重写前:
* 左边:类名
* 中间:@
* 右边:hashCode的十六进制表现形式*/
public static voidmain(String[] args) {
Student s= new Student("张三", 23);
String str=s.toString();//toString()的作用: 可以更方便地显示属性值//getXxx方法用于获取值,可以用于显示,也可以对值进行操作
System.out.println(str);
System.out.println(s);//如果直接打印对象名,会默认调用toString方法//alt shift s 重写toString方法
}
}
toString() 方法
Object类的 equals() 方法
* A:案例演示
* a:指示其他某个对象是否与此对象 “相等”
* b:默认情况下比较的是对象的引用是否相同
* c:由于比较对象的引用没有意义,一般建议重写该方法
// 默认方法
public booleanequals(Object obj) {return (this ==obj);
}
@Overridepublic booleanequals(Object obj) {if (this ==obj)return true;if (obj == null)return false;if (getClass() !=obj.getClass())return false;
Student other=(Student) obj;if (age !=other.age)return false;if (name == null) {if (other.name != null)return false;
}else if (!name.equals(other.name))return false;return true;
}
Student类 内重写 equals方法
packagecom.heima.object;importcom.heima.bean.Student;public classDemo3_Equals {/** equals 默认比较地址值
* public boolean equals(Object obj) {
return (this == obj);
* }
* object中的equals方法是比较对象的地址值,没有什么意义,我们需要重写
* 因为在开发中我们通常比较的是对象中的属性值,我们认为相同属性是同一个对象*/
public static voidmain(String[] args) {
Student s1= new Student("张三", 18);
Student s2= new Student("张三", 18);boolean b = s1.equals(s2); //重写后比较对象中的属性值
System.out.println(b);
System.out.println(s1==s2);
}
}
equals() 方法
== 号 和 equals()方法 的区别
* 共同点:都可以做比较,都返回boolean值
* 区别:
* == 是一个比较运算符,既可以比较基本数据类型,也可以用于比较引用数据类型
基本数据类型比较的是值,引用数据类型比较的是地址值
* equals() 方法 是一个方法,只能比较引用数据类型,所用的对象都会继承Object类 中的方法
如果没有重写Object类中的方法,equals() 方法和 == 号比较引用数据类型 无区别,重写后的equals() 方法 比较的是对象中的属性值