当前位置: 首页 > news >正文

【Java SE】Object类

  • Object是Java 默认提供的一个类。Java里除了Object类,所有的类都是存在继承关系的。默认继承Object类。
  • Java 中的 Object 类是类层次结构的根类,所有类都直接或间接继承自 Object 类。它提供了一些基本方法,这些方法可以被所有 Java 对象使用。
  • 即所以有的类的对象都可以使用Object的引用进行接收

目录

Object类的主要方法

1.  toString()

2.   equals()

重写后完整代码:

原理如下:

输出: 

3.   clone()

4.   hashCode()

※※※※※     

重写后完整代码:

5.   getClass()

6.    finalize()

注意事项


Object类的主要方法

1.  toString()

作用:打印对象的内容

返回对象的字符串表示。默认实现返回类名和对象的哈希码,但通常会被重写以提供更有意义的信息。

public String toString() {return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

 


2.   equals()

作用:对比对象

 在Java中, == 进行比较时;

  • 如果 == 左右两侧是基本类型变量,比较的是变量中的值是否相同
  • 如果 == 左右两侧是引用类型变量,比较的是引用变量地址是否相同
  • 如果要比较对象中的内容,必须重写Object中的equals方法,因为equals()方法默认也是按照地址比较的

重写后完整代码:

public class Person implements Cloneable{private String name;private int age;@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +'}';}public Person(String name, int age) {this.name = name;this.age = age;}@Overrideprotected Object clone() throws CloneNotSupportedException {return super.clone();}@Overridepublic boolean equals(Object obj) {Person person = (Person) obj;return this.name.equals(person.name)&&this.age == person.age;}
}
public class Test {public static void main(String[] args)throws CloneNotSupportedException{Person person1 = new Person("wugang",55);Person person2 = new Person("wujun",66);Person person3 = (Person) person1.clone();System.out.println(person1.equals(person3));//克隆的System.out.println(person1.equals(person2));}
}

原理如下:

①创建类和输入字段,实例两个对象person1和person2,并且调用带参数的构造方法

 

②使用克隆方法,克隆出一个新的person1 作为 person3 

具体方式见此文:

 【Java SE】Clonable接口和深拷贝-CSDN博客文章浏览阅读414次,点赞17次,收藏6次。Java中的浅拷贝与深拷贝实现对比 摘要:本文介绍了Java中实现对象拷贝的两种方式。浅拷贝通过实现Cloneable接口和重写clone()方法实现,仅复制对象本身及基本类型字段,引用类型字段共享内存。深拷贝则需递归处理引用类型字段,通过调用字段对象的clone()方法实现完全独立复制。文章对比了两者的特性:浅拷贝内存占用低但修改会影响原对象,深拷贝完全独立但实现更复杂。建议根据场景选择:对象无引用字段或字段不可变时用浅拷贝,需要完全独立副本时用深拷贝。 https://blog.csdn.net/Boop_wu/article/details/149532970

 

③重写equals()方法 

输出: 


3.   clone()

创建并返回对象的一个副本。需要实现 Cloneable 接口才能使用。

详情见此文:

【Java SE】Clonable接口和深拷贝-CSDN博客文章浏览阅读414次,点赞17次,收藏6次。Java中的浅拷贝与深拷贝实现对比 摘要:本文介绍了Java中实现对象拷贝的两种方式。浅拷贝通过实现Cloneable接口和重写clone()方法实现,仅复制对象本身及基本类型字段,引用类型字段共享内存。深拷贝则需递归处理引用类型字段,通过调用字段对象的clone()方法实现完全独立复制。文章对比了两者的特性:浅拷贝内存占用低但修改会影响原对象,深拷贝完全独立但实现更复杂。建议根据场景选择:对象无引用字段或字段不可变时用浅拷贝,需要完全独立副本时用深拷贝。 https://blog.csdn.net/Boop_wu/article/details/149532970


4.   hashCode()

返回对象的哈希码值。如果两个对象通过 equals 方法相等,那么它们的哈希码必须相同。

public native int hashCode();

 

※※※※※     

Java 7 及以上版本可以使用 java.util.Objects 的静态方法 hash,自动处理多字段的哈希组合:

@Override
public int hashCode() {return Objects.hash(field1, field2, field3);
}

 

重写后完整代码:

public class Test {public static void main(String[] args)throws CloneNotSupportedException{D1.Person person1 = new D1.Person("wugang",55);D1.Person person2 = new D1.Person("wujun",66);D1.Person person3 = (Person) person1.clone();System.out.println(person1.hashCode());System.out.println(person2.hashCode());System.out.println(person3.hashCode());}
}
import java.util.Objects;public class Person implements Cloneable {public String name;public int age;public Person(String name, int age) {this.name = name;this.age = age;}protected Object clone() throws CloneNotSupportedException {return super.clone();}public int hashCode() {return Objects.hash(name, age);}
}

 


5.   getClass()

返回对象的运行时类

public final native Class<?> getClass();

6.    finalize()

在垃圾回收器回收对象之前调用,通常用于资源清理。不建议重写此方法

protected void finalize() throws Throwable { }

 

注意事项

  • Object 类的方法在大多数情况下需要根据具体需求进行重写。
  • finalize 方法已被标记为过时,不建议使用。
  • 使用 clone 方法时要注意浅拷贝和深拷贝的区别。

Java 中的 Object 类是类层次结构的根类,所有类都直接或间接继承自 Object 类。它提供了一些基本方法,这些方法可以被所有 Java 对象使用。

http://www.lryc.cn/news/595735.html

相关文章:

  • 行业分类表sql
  • Axios Token 设置示例
  • OEC 刷机Armbain 25.05后配置说明
  • Java 网络编程详解:从基础到实战,彻底掌握 TCP/UDP、Socket、HTTP 网络通信
  • ClearML库详解:从实验跟踪到模型部署的全流程管理
  • 网宿安全发布《2024年度网络安全态势报告》:AI驱动攻防升维,体系化主动安全成破局关键
  • ADA4522-2ARMZ-R7 ADI亚德诺 双通道零漂移运算放大器 工业高精度测试设备应用
  • WAF 防护与漏洞扫描联动:让安全防御更精准高效
  • Linux——进程间通信,匿名管道,进程池
  • 网络初级安全第三次作业
  • C++引用折叠
  • PHP与Web页面交互:从基础表单到AJAX实战
  • 【bug】ubuntu20.04 orin nx Temporary failure resolving ‘ports.ubuntu.com‘
  • 【测试开发】---Bug篇
  • Kafka监控体系搭建:基于Prometheus+JMX+Grafana的全方位性能观测方案
  • lspci/setpci用法小结
  • 《Webpack热更新瓶颈突破:全链路优化指南》
  • C++性能优化擂台技术文章大纲
  • web3.0怎么入局
  • MySql 运维性能优化
  • 前端项目启动后,只有localhost地址,没有ip地址
  • MoonBit Meetup 杭州站丨 探讨AI基础软件的精彩回顾
  • 面向对象分析与设计40讲(6)设计原则之开闭原则
  • pandas库的基本运用
  • 传统RNN模型
  • vcs门级仿真(后仿真)指南
  • Spring、Spring MVC、Spring Boot、Spring Cloud的联系和区别
  • 异构融合 4A:重构高性能计算与复杂场景分析的安全与效率边界
  • gpt面试题
  • MCP vs 传统集成方案:REST API、GraphQL、gRPC的终极对比