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值相同)

相关文章
|
12月前
|
存储 Java 索引
用Java语言实现一个自定义的ArrayList类
自定义MyArrayList类模拟Java ArrayList核心功能,支持泛型、动态扩容(1.5倍)、增删改查及越界检查,底层用Object数组实现,适合学习动态数组原理。
523 4
|
12月前
|
IDE JavaScript Java
在Java 11中,如何处理被弃用的类或接口?
在Java 11中,如何处理被弃用的类或接口?
459 5
|
12月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
609 1
|
12月前
|
Java Go 开发工具
【Java】(8)正则表达式的使用与常用类分享
正则表达式定义了字符串的模式。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。
615 1
|
12月前
|
存储 Java 程序员
【Java】(6)全方面带你了解Java里的日期与时间内容,介绍 Calendar、GregorianCalendar、Date类
java.util 包提供了 Date 类来封装当前的日期和时间。Date 类提供两个构造函数来实例化 Date 对象。第一个构造函数使用当前日期和时间来初始化对象。Date( )第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数。
405 0
|
12月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
541 1
|
编解码 Java 开发者
Java String类的关键方法总结
以上总结了Java `String` 类最常见和重要功能性方法。每种操作都对应着日常编程任务,并且理解每种操作如何影响及处理 `Strings` 对于任何使用 Java 的开发者来说都至关重要。
592 5
|
安全 Java 数据建模
Java记录类:简化数据载体的新选择
Java记录类:简化数据载体的新选择
596 101
|
安全 Java 开发者
Java记录类:简化数据载体的新方式
Java记录类:简化数据载体的新方式
470 100
|
缓存 安全 Java
Java反射机制:动态操作类与对象
Java反射机制是运行时动态操作类与对象的强大工具,支持获取类信息、动态创建实例、调用方法、访问字段等。它在框架开发、依赖注入、动态代理等方面有广泛应用,但也存在性能开销和安全风险。本文详解反射核心API、实战案例及性能优化策略,助你掌握Java动态编程精髓。