1. Object类概述
- 是类层次结构的根类
- 每个类都使用 Object 作为超类
- 所有类都直接或者间接的继承自该类
- 所有对象(包括数组)都实现这个类的方法。
2. Object的构造方法
- public Object()
- 回想面向对象中为什么说:
- 子类的构造方法默认访问的是父类的无参构造方法
3. Object类的hashCode()方法
- Object类的hashCode()方法
-
案例演示
-
package com.heima.object; import com.heima.animal.Cat; public class Demo1_HashCode { /** * @param args */ public static void main(String[] args) { Object obj1 = new Object(); int num = obj1.hashCode(); System.out.println(num); //输出7309408 Cat c1 = new Cat(); System.out.println(c1.hashCode()); //输出26905665 Cat c2 = new Cat(); System.out.println(c2.hashCode()); //输出23994111 } }
-
public int hashCode()
-
返回该对象的哈希码值。默认情况下,该方法会根据对象的地址来计算。
-
不同对象的,hashCode()一般来说不会相同。但是,同一个对象的hashCode()值肯定相同。
-
-
-
4. Object类的getClass()方法
- Object类的getClass()方法
-
案例演示
-
package com.heima.object; import com.heima.animal.Cat; public class Demo2_GetClass { /** * @param args */ public static void main(String[] args) { Cat c1 = new Cat(); System.out.println(c1.getClass()); Class clazz = c1.getClass(); // 获取该对象的字节码文件 String name = clazz.getName(); // 获取名称 System.out.println(clazz); System.out.println(name); System.out.println(c1.hashCode()); System.out.println(clazz.hashCode()); } }
-
public final Class getClass()
-
返回此对象的运行时类。
-
可以通过Class类中的一个方法,获取对象的真实类的全名称。
-
public String getName()
-
-
-
5. Object类的toString()方法
-
案例演示
-
package com.heima.object; public class Demo3_ToString { /** * @param args */ public static void main(String[] args) { Student s = new Student("Ann", 18); String str = s.toString(); System.out.println(str); /*public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); } * toString方法源码显示,返回的结果是 * 类名 + @ + hashCode的十六进制变现形式 * * 这么写,没有实际意义。 * toString的作用:可以更方便的显示属性值。通过重写toString方法。 */ System.out.println(s); // 如果直接打印对象的引用,会默认调用toString()方法。 } }
-
package com.heima.object; public class Student { private String name; private int age; public Student() { super(); } public Student(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Student [name=" + name + ", age=" + age + "]"; } }
-
6. Object类的equals()方法
-
案例演示
-
指示其他某个对象是否与此对象“相等”。
-
默认情况下比较的是对象的引用是否相同。
-
由于比较对象的引用没有意义,一般建议重写该方法。
-
package com.heima.object; public class Student { private String name; private int age; public Student() { super(); } public Student(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Student [name=" + name + ", age=" + age + "]"; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + age; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override /*public boolean equals(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; }*/ public boolean equals(Object obj){ Student s = (Student)obj; return this.name.equals(s.name) && this.age == s.age; } /*重写equals方法,由于传递的参数为Object obj,而多态中无法直接调用子类中的属性,需要 * 向下转型,故 Student s = (Student)obj; * 从而获取到Student类中的属性:name和age。 * String类型的数据有equals方法,int数据作为基本数据类型,没有方法,直接使用"=="。 * */ }
-
- ==号和equals方法的区别
-
==是一个比较运算符号,既可以比较基本数据类型,也可以比较引用数据类型,基本数据类型比较的是值,引用数据类型比较的是地址值
-
equals方法是一个方法,只能比较引用数据类型,所有的对象都会继承Object类中的方法,如果没有重写Object类中的equals方法,equals方法和==号比较引用数据类型无区别,重写后的equals方法比较的是对象中的属性
-