Object

Object类的作用

Object类是Java中所有类的父类,所以,Java中所有类的对象都可以直接使用Object类中提供的一些方法

Object类的常见方法

方法名说明
public String toString()返回对象的字符串表示形式
public boolean equals(Object o)判断两个对象是否相等
protected Object clone()对象克隆

案例演示

toString()和equals()

Student类

package com.ligemanyin._Object;import java.util.Objects;/*** ClassName:Student* Package:com.ligemanyin._Object* Description:Object常用API演示** @Author:离歌慢饮* @CreateTime:2024/2/17 15:49* @Version:1.0*/
public class Student {private String name;private int age;public Student() {}public Student(String name, int age) {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;}@Overridepublic String toString() {return "[姓名:" + name + ",年龄:" + age + "]";}@Overridepublic boolean equals(Object o) {//判断两个对象地址是否一样,一样则返回trueif (this == o) return true;//判断o如果是null或比较者与被比较者的类型不一样,返回falseif (o == null || getClass() != o.getClass()) return false;//o不为null且o一定是Student对象,则将o转为Student类型并开始比较内容Student student = (Student) o;return age == student.age && Objects.equals(name, student.name);}
}

测试类StudentTest

package com.ligemanyin._Object;/*** ClassName:StudentTest* Package:com.ligemanyin._Object* Description:Object中的toString()和equals()方法演示** @Author:离歌慢饮* @CreateTime:2024/2/17 15:51* @Version:1.0*/
public class StudentTest {public static void main(String[] args) {Student student = new Student("张三", 22);System.out.println(student);Student student1 = student;Student student2 = new Student("李四", 23);System.out.println(student1);   //[姓名:张三,年龄:22]System.out.println(student2);   //[姓名:李四,年龄:23]System.out.println(student.equals(student1));   //trueSystem.out.println(student.equals(student2));   //falseStudent student3 = new Student("李四", 23);System.out.println(student2.equals(student3));  //true  根据重写的equals方法判断,其地址并不相同}
}

toString存在的意义: toString()方法存在的意义就是为了被子类重写,以便返回对象具体的内容

equals存在的意义: 直接比较两个对象的地址是否相同完全可以用“==”替代equals,equals存在的意义就是为了被子类重写,以便子类自己来制定比较规则(如比较对象内容)

clone()

User类

package com.ligemanyin._Object;import java.util.Arrays;/*** ClassName:User* Package:com.ligemanyin._Object* Description:Object中clone()方法演示** @Author:离歌慢饮* @CreateTime:2024/2/17 16:22* @Version:1.0*/
public class User implements Cloneable{ //Cloneable是一个标记接口,如果要实现clone功能,需实现该接口private int id;     //编号private String userName;    //用户名private String password;    //密码private double[] scores;    //分数public User() {}public User(int id, String userName, String password, double[] scores) {this.id = id;this.userName = userName;this.password = password;this.scores = scores;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public double[] getScores() {return scores;}public void setScores(double[] scores) {this.scores = scores;}@Overrideprotected Object clone() throws CloneNotSupportedException {//super去调用父类Object中的clone方法return super.clone();}@Overridepublic String toString() {return "User{" +"id=" + id +", userName='" + userName + '\'' +", password='" + password + '\'' +", scores=" + Arrays.toString(scores) +'}';}
}

测试类UserTest

package com.ligemanyin._Object;/*** ClassName:UserTest* Package:com.ligemanyin._Object* Description:** @Author:离歌慢饮* @CreateTime:2024/2/17 16:29* @Version:1.0*/
public class UserTest {public static void main(String[] args) throws CloneNotSupportedException {User u1 = new User(1, "zhangsan", "123456", new double[] {99.0,99});User u2 = (User) u1.clone();System.out.println(u1); //User{id=1, userName='zhangsan', password='123456', scores=[99.0, 99.0]}System.out.println(u2); //User{id=1, userName='zhangsan', password='123456', scores=[99.0, 99.0]}System.out.println(u1.equals(u2));System.out.println(u1 == u2);   //克隆后会创建一个新对象出来,所以原对象与克隆对象地址不同System.out.println(u1.getScores()); //[D@67b6d4aeSystem.out.println(u2.getScores()); //[D@67b6d4ae//浅克隆中数组对象会直接拷贝其在堆内存中的地址,所以两个对象的数组地址才会相同}
}

浅克隆: 拷贝出的新对象,与原对象中的数据一模一样(引用类型拷贝的只是地址)

重写clone()

package com.ligemanyin._Object;import java.util.Arrays;/*** ClassName:User* Package:com.ligemanyin._Object* Description:Object中clone()方法演示** @Author:离歌慢饮* @CreateTime:2024/2/17 16:22* @Version:1.0*/
public class User implements Cloneable{ //Cloneable是一个标记接口,如果要实现clone功能,需实现该接口private int id;     //编号private String userName;    //用户名private String password;    //密码private double[] scores;    //分数public User() {}public User(int id, String userName, String password, double[] scores) {this.id = id;this.userName = userName;this.password = password;this.scores = scores;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public double[] getScores() {return scores;}public void setScores(double[] scores) {this.scores = scores;}@Overrideprotected Object clone() throws CloneNotSupportedException {//super去调用父类Object中的clone方法User u2 = (User) super.clone();//对数组对象进行克隆,即是将创建一个新的数组对象并将值拷贝给该对象,// 由此方法得到的数组对象与原数组对象不是同一个地址u2.scores = u2.scores.clone();return u2;}@Overridepublic String toString() {return "User{" +"id=" + id +", userName='" + userName + '\'' +", password='" + password + '\'' +", scores=" + Arrays.toString(scores) +'}';}
}

测试类UserTest

package com.ligemanyin._Object;/*** ClassName:UserTest* Package:com.ligemanyin._Object* Description:** @Author:离歌慢饮* @CreateTime:2024/2/17 16:29* @Version:1.0*/
public class UserTest {public static void main(String[] args) throws CloneNotSupportedException {User u1 = new User(1, "zhangsan", "123456", new double[] {99.0,99});User u2 = (User) u1.clone();System.out.println(u1); //User{id=1, userName='zhangsan', password='123456', scores=[99.0, 99.0]}System.out.println(u2); //User{id=1, userName='zhangsan', password='123456', scores=[99.0, 99.0]}System.out.println(u1.equals(u2));System.out.println(u1 == u2);   //克隆后会创建一个新对象出来,所以原对象与克隆对象地址不同System.out.println(u1.getScores()); //[D@67b6d4aeSystem.out.println(u2.getScores()); //[D@34b7bfc0}
}

深克隆: 对象中基本类型的数据直接拷贝;对象中的字符串数据拷贝其地址;对象中还包含的其他对象,不会拷贝地址,而是创建新对象

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/686300.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVASE进阶:网络编程(编程实现TCP、UDP传输)

👨‍🎓作者简介:一位大四、研0学生,正在努力准备大四暑假的实习 🌌上期文章:JAVASE进阶:高级写法——方法引用(Mybatis-Plus必学前置知识) 📚订阅专栏&#x…

pytorch tensor张量的操作

import torch import torch.nn as nn import unittest# 创建一个简单的 Conv2d 层 conv_layer nn.Conv2d(in_channels3, out_channels4, kernel_size3, stride1, padding1) # input_tensor torch.randn(1, 3, 5, 5) input_tensor torch.ones(1, 3, 5, 5) # print("inpu…

【前端工程化面试题】说一下 webpack 的构建流程

类似问题是,说一下 vite 的构建流程,参考这篇文章。 初始化流程 从配置文件和shell 语句中读取合并参数,初始化需要使用的插件和执行环境所需要的参数配置文件默认是 webpack.config.js编译构建流程 解析入口模块,从入口模块开始串…

半导体物理基础-笔记

源内容参考:https://www.bilibili.com/video/BV11U4y1k7zn/?spm_id_from333.337.search-card.all.click&vd_source61654d4a6e8d7941436149dd99026962 半导体物理要解决的四个问题 载流子在哪里;如何获得足够多的载流子;载流子如何运动…

html从零开始8:css3新特性、动画、媒体查询、雪碧图、字体图标【搬代码】

css3新特性 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, …

linux kernel 内存踩踏之KASAN_SW_TAGS(二)

一、背景 linux kernel 内存踩踏之KASAN&#xff08;一&#xff09;_kasan版本跟hasan版本区别-CSDN博客 上一篇简单介绍了标准版本的KASAN使用方法和实现&#xff0c;这里将介绍KASAN_SW_TAGS和KASAN_HW_TAGS 的使用和背后基本原理&#xff0c;下图是三种方式的对比&#x…

萨科微半导体宋仕强介绍说

萨科微半导体宋仕强介绍说&#xff0c;电源管理芯片是指在电子设备系统中&#xff0c;负责对电能的变换、分配、检测等进行管理的芯片&#xff0c;其性能和可靠性直接影响电子设备的工作效率和使用寿命&#xff0c;是电子设备中的关键器件。萨科微slkor&#xff08;www.slkormi…

2023年中国数据智能管理峰会(DAMS上海站2023):核心内容与学习收获(附大会核心PPT下载)

随着数字经济的飞速发展&#xff0c;数据已经渗透到现代社会的每一个角落&#xff0c;成为驱动企业创新、提升治理能力、促进经济发展的关键要素。在这样的背景下&#xff0c;2023年中国数据智能管理峰会&#xff08;DAMS上海站2023&#xff09;应运而生&#xff0c;汇聚了众多…

1.逆向基础

文章目录 一、前言二、什么是逆向&#xff1f;三、软件逆向四、逆向分析技术五、文本字符六、Windows系统1.Win API2.WOW643.Windows消息机制4.虚拟内存 一、前言 原文以及后续文章可点击查看&#xff1a;逆向基础 逆向真的是一个很宏大的话题&#xff0c;而且大多数都是相当…

数据预处理 —— AI算法初识

一、预处理原因 AI算法对数据进行预处理的原因主要基于以下几个核心要点&#xff1a; 1. **数据清洗**&#xff1a; - 数据通常包含缺失值、异常值或错误记录&#xff0c;这些都会干扰模型训练和预测准确性。通过预处理可以识别并填充/删除这些不完整或有问题的数据。 2. **数…

LabVIEW智能监测系统

LabVIEW智能监测系统 设计与实现一个基于LabVIEW的智能监测系统&#xff0c;通过高效的数据采集和处理能力&#xff0c;提高监测精度和响应速度。系统通过集成传感器技术与虚拟仪器软件&#xff0c;实现对环境参数的实时监测与分析&#xff0c;进而优化监控过程&#xff0c;提…

如何实现Vuex数据持久化

Vuex是一个非常流行的状态管理工具&#xff0c;它可以帮助我们在Vue.js应用中管理和共享数据。然而&#xff0c;当应用重新加载或刷新时&#xff0c;Vuex的状态会被重置&#xff0c;这就导致了数据的丢失。那么&#xff0c;如何才能实现Vuex的数据持久化呢&#xff1f;让我们一…

C语言第二十六弹---字符串函数(下)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 目录 1、strncat 函数的使用 2、strncmp 函数的使用 3、strstr 函数的使用和模拟实现 4、strtok 函数的使用 5、strerror 函数的使用 6、perror 函数的使用…

51单片机编程应用(C语言):串口通信

目录 通信的基本概念和种类 1.1串行通信与并行通信 ​编辑 1.2同步通信与异步通信 1.3单工&#xff0c;半双工&#xff0c;全双工 1.4通信速率 二、波特率和比特率的关系 串口通信简介&#xff1a; 1.接口标准 RS-232 2、D型9针接口定义 3.通信协议&#xff1a; …

【类与对象 -2】学习类的6个默认成员函数中的构造函数与析构函数

目录 1.类的6个默认成员函数 2.构造函数 2.1概念 2.2特性 3.析构函数 3.1析构函数的概念 3.2特性 1.类的6个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任何类在什么都不写时&#xff0c;…

PWM驱动直流电机

一、知识补充; 低频时有蜂鸣器响声&#xff0c;加大PWM频率&#xff0c;超出人耳范围就可以听不到&#xff0c;20Hz~20kHz 加大频率-->减小预分频器&#xff0c;从720-->36现在频率就是20kHz这样不会影响占空比&#xff1f; 二、接线图 三、代码分析 main,c #include…

docker (四)-docker网络

默认网络 docker会自动创建三个网络&#xff0c;bridge,host,none bridge桥接网络 如果不指定&#xff0c;新创建的容器默认将连接到bridge网络。 默认情况下&#xff0c;使用bridge网络&#xff0c;宿主机可以ping通容器ip&#xff0c;容器中也能ping通宿主机。 容器之间只…

飞天使-k8s知识点21-kubernetes实操6-daemonset

文章目录 daemonsetservice endpoint pod 之间的关系service基于Service访问外部服务 daemonset DaemonSet 是 Kubernetes 中的一种资源对象&#xff0c;它确保在集群中的每个节点上都运行一个 Pod 的副本。这对于运行集群级别的守护进程&#xff08;例如日志收集器、监控代理…

链式结构实现队列

链式结构实现队列 1.队列1.1队列的概念及结构1.2队列的实现 2. 队列的各种函数实现3. 队列的全部代码实现 1.队列 1.1队列的概念及结构 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出 FIFO(Fi…

Python 修改window桌面背景图片

本篇为Python 修改window桌面背景图片&#xff0c;修改背景图片需要利用windows提供的api&#xff0c;以操作电脑原有功能修改背景图片。 引入类库 首先需要引入相应类库。 示例如下&#xff1a; import win32api import win32con import win32gui 修改背景图片 修改背景图…