Object类
文章目录
- Object类
- 1.1Object常用方法
- 1.1.1 hash Code()方法
- 1.1.2 getClass()方法
- 1.1.3 toString方法
- 1.1.4 equals()方法
- Object类是Java java.lang 包下的核心类,Object类是所有类的父类,任何一个类都直接继承或间接继承他;Object类可以显示继承,也可以隐式继承,以下俩种方式是一样的:
public class Zi extends Object{
}
public class Zi{
}
- Object类构造方法
Object类中会有一个默认的无参构造方法:public Object(){};在所有的Java类中如果没有显式的写出构造方法,也同样会默认一个无参的构造方法.作为所有Java类的基类(Object自己除外),Object的构造方法是所有Java类创建对象时所必须调用的.
1.1Object常用方法
1.1.1 hash Code()方法
- Object hashCode()方法用于获取对象的hash值
hashCode()方法的使用:
class HashCodeTest {
public static void main(String[] args) {
// Object 使用 hashCode()
Object obj1 = new Object();
System.out.println(obj1.hashCode());
Object obj2 = new Object();
System.out.println(obj2.hashCode());
Object obj3 = new Object();
System.out.println(obj3.hashCode());
}
/*输出 225534817
1878246837
92933653
*/
- String 和 ArrayList 类使用 hashCode() 方法,String 和 ArrayList 类都继承了 Object,所以可以直接使用 hashCode() 方法:
import java.util.ArrayList;
class HashCodeTest1{
public static void main(String[] args) {
// String 使用 hashCode()
String str = new String();
System.out.println(str.hashCode()); // 0
// ArrayList 使用 hashCode()
ArrayList<Integer> list = new ArrayList<>();
System.out.println(list.hashCode()); // 1
}
}
//0 1
- 如果两个对象相等,则它们的哈希值也是相等的:
class HashCodeTest2{
public static void main(String[] args) {
// Object 使用 hashCode()
Object obj1 = new Object();
// obj1 赋值给 obj2
Object obj2 = obj1;
// 判断两个对象是否相等
System.out.println(obj1.equals(obj2)); // true
// 获取 obj1 与 obj2 的哈希值
System.out.println(obj1.hashCode()); // 225534817
System.out.println(obj2.hashCode()); // 225534817
}
}
/*不同对象的,hashCode()一般来说不会相同。
但是,同一个对象的hashCode()值肯定相同。
不是对象的实际地址值,可以理解为逻辑地址值*/
1.1.2 getClass()方法
- Object getClass() 方法用于获取对象的运行时对象的类。
class GetClass{
public static void main(String[] args) {
// getClass() with Object
Object obj1 = new Object();
System.out.println("obj1 的类为: " + obj1.getClass());
// getClass() with String
String obj2 = new String();
System.out.println("obj2 的类为: " + obj2.getClass());
// getClass() with ArrayList
ArrayList<Integer> obj3 = new ArrayList<>();
System.out.println("obj3 的类为: " + obj3.getClass());
}
}
/*
obj1 的类为: class java.lang.Object
obj2 的类为: class java.lang.String
obj3 的类为: class java.util.ArrayList
*/
1.1.3 toString方法
- 1,toString()方法在Object类中定义,其返回值是String类型,返回类名和他的引用地址在进行与其他类型数据的连接操作时,自动调用tostring()方法。
2,作用是返回对象字符串表现形式。建议所有子类重写此方法,这样返回的字符串更利于阅读。
import java.util.Date;
public class ToStringTest {
public static void main(String[] args) {
Date now = new Date();
System.out.println("now="+now);//相当于
System.out.println("now="+now.toString());
}
}
- 可以根据需要在用户自定义类型中重写tostring()方法
如tostring类重写了tostring()方法,返回字符串的值
public class ToStringtest1{
public static void main(String[] args) {
String s=new String();
s="hello";
System.out.println(s);//相当于
System.out.println(s.toString());
}
}
1.1.4 equals()方法
“equals”:不能做基本类型的比较,引用类型如果不重写比较的是地址值,重写之后比较的是内容. #####
//重写equals方法
public boolean equals(Object obj) {
Student s = (Student)obj;
//年龄是一个基本数据类型,基本数据类型是不能调方法的,只能直接去比较
return this.name.equals(s.name) && this.age == s.age;
}
/*
equals方法,比较两个对象是否相等
public boolean equals(Object obj){
return (this == obj);
}
Object中的equals方法是比较对象的地址值,没有什么意义,我们 需要重写它。
因为在开发中我们通常比较的是对象中的属性值,我们认为 相同属性是同一个对象,这样我们就需要重写equals方法。
*/
public static void main(String[] args) {
Student s1 = new Student("张三", 23);
Student s2 = new Student("张三", 23);
//比较两个对象是否相等,false
System.out.println(s1 == s2);
//重写equals方法之后比较的是对象中的属性值,true
System.out.println(s1.equals(s2));
}