Java常用类--------Object类

简介: Java常用类--------Object类

Object类:

java.lang.Object是Java语言中一切类的父类,也就是继承结构中的最顶层,该类中定义了一些公共的方法,这些方法可以被任何一个对象所调用。


如下所示:

举例:

public class sunday {
    public static void main(String[] args){
        Object obj1=new Object();
        Object obj2=new Object();
        //直接输出和调用toString方法都可以打印对象
        System.out.println(obj1);
        System.out.println(obj1.toString());
        System.out.println(obj2);
        System.out.println(obj2.toString());
        System.out.println("obj1和obj2是否相等?"+(obj1==obj2));
        System.out.println("obj1和obj2是否相等?"+obj1.equals(obj2));
        System.out.println("obj1的哈希码是:"+obj1.hashCode());
        System.out.println("obj2的哈希码是:"+obj2.hashCode());
    }
}

输出:

java.lang.Object@16b98e56
java.lang.Object@16b98e56
java.lang.Object@7ef20235
java.lang.Object@7ef20235
obj1和obj2是否相等?false
obj1和obj2是否相等?false
obj1的哈希码是:381259350
obj2的哈希码是:2129789493

注:


"=="运算符和equals()方法是等价的,都是用来比较两个对象的引用是否相等,如果两个对象的引用是相等的,那么这两个对象一定相等,适用于所有的类,因为在Java中的object类是所有类的“祖宗”,所有的类都继承了它有的属性和方法。


在任何一个没有重写equals方法的类里,且它的父类除object外都没有写,那么"= ="和equals是等价的,我们在比较该类对象的时候就是调用Object类的equals方法,也就是用“==”运算符比较两个对象,如果该类不重写hashcode()方法,那么这个类的不同对象都具有不同的哈希码。


但如果非要重写hashcode()方法,需要保证以下几点:


<1>在程序运行期间,只要对象的字段变化,不会影响equals方法的决策结果,那么在这个期间,无论调用多少次hashcode(),都必须返回同一个散列码。


原因:散列码是用来把一堆对象散列到自己各自的队列中去的一种标识码,如果通过equals比较出来的这两个对象是相等的,那么这两个对象的地址是相同的,地址相同的对象,他们的散列码一定相同。


<2>通过equals()调用返回true的两个对象的hashcode()方法的返回值也一定相同。


<3>通过equals()方法返回false的两个对象的hashcode()方法的返回值可以相同。


注意:


<1>一般情况下在定义类时,都会重写toString()方法,在打印该类对象时,方便看到对象的相关属性值信息。


<2>“==”运算符左右两边是基本数据类型,就是比较两个值是否相等;如果是引用数据类型,就是比较两个引用是否指向同一内存地址。


<3>在定义类时,可以重写equals()方法,重新定义对象的比较逻辑,同时也要重写hashcode()方法。


原因:


如果只重写equals方法,不重写hashcode时,违反规定:equals相等的对象必须具有相等的哈希码(因为 hashcode的返回值还是按照Object类的规范:同一对象的hashcode值相同)

相关文章
|
7天前
|
Java 关系型数据库 MySQL
Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
【4月更文挑战第12天】Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
36 3
|
3天前
|
人工智能 安全 Java
Java8 - LocalDateTime时间日期类使用详解
Java8 - LocalDateTime时间日期类使用详解
|
4天前
|
安全 Java 程序员
|
4天前
|
XML JSON Java
作为所有类的顶层父类,没想到Object的魔力如此之大!
在上一篇博文中我们提到了Java面向对象的四大特性,其中谈及“抽象”特性时做了一个引子,引出今天的主人公Object,作为所有类的顶级父类,Object被视为是James.Gosling的哲学思考,它高度概括了事务的自然与社会行为。
46 13
|
5天前
|
Java
Java Class类
Java Class类
8 0
|
11天前
|
Java 编译器
Java Character 类
4月更文挑战第13天
|
12天前
|
存储 Java
Java基础教程(7)-Java中的面向对象和类
【4月更文挑战第7天】Java是面向对象编程(OOP)语言,强调将事务抽象成对象。面向对象与面向过程的区别在于,前者通过对象间的交互解决问题,后者按步骤顺序执行。类是对象的模板,对象是类的实例。创建类使用`class`关键字,对象通过`new`运算符动态分配内存。方法包括构造函数和一般方法,构造函数用于对象初始化,一般方法处理逻辑。方法可以有0个或多个参数,可变参数用`类型...`定义。`this`关键字用于访问当前对象的属性。
|
16天前
|
Java Shell
Java 21颠覆传统:未命名类与实例Main方法的编码变革
Java 21颠覆传统:未命名类与实例Main方法的编码变革
14 0
|
16天前
|
Java
Java 15 神秘登场:隐藏类解析未知领域
Java 15 神秘登场:隐藏类解析未知领域
18 0
|
17天前
|
安全 Java
append在Java中是哪个类下的方法
append在Java中是哪个类下的方法
23 9