java 常见API(Objects)

news2024/11/20 23:20:34

定义

  • API就是别人定义好的工具类和工具包
  • 目的:避免重复造轮子,提升开发效率,更加专注于实现业务逻辑

Object 类

object类是所有类的祖宗类,所有的类型都是可以使用Object的方法的
最常见的三个方法:

  • toString:print就会调用这个方法,这个方法一般会使用属性进行重写
  • equals:判断两个对象是否相等,这个方法一般会使用属性进行重写
  • clone:对象克隆

重寫toString和equals

@Data
public class Student implements Cloneable{

    private String name;
    private int age;


    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null || getClass() != obj.getClass()) {
            return false;
        }
        Student student = (Student) obj;
        return age == student.age && name.equals(student.name);
    }

  }  

使用

Student student = new Student();
student.setName("张三");
student.setAge(18);

Student student1 = new Student();
student1.setName("张三");
student1.setAge(18);

// 因为Student类重写了equals方法,所以这里返回true
System.out.println(student.equals(student1));
// 因为Student类重写了toString方法,所以这里返回Student{name='张三', age=18}
System.out.println(student);
  • 直接赋值会指向同一个对象,导致修改新对象和源对象绑定在一起
  • 克隆对象知识克隆了属性,克隆对象和源对象是两个不同的个体
  • 重写 clone ,想要实现克隆必须实现接口Cloneable
  • 虽然父类有clone的方法,但是返回的Object对象,可以重写,在重写方法中进行强制转换一下
@Data
public class Student implements Cloneable{

    一万行代码

    @Override
    public Student clone() throws CloneNotSupportedException {
        return (Student) super.clone();
    }
}

使用

// 对象直接赋值,student2和student指向同一个对象 修改student2的name属性,student的name属性也会改变
Student student2 = new Student();
student2 = student;
student2.setName("李四");
System.out.println(student);

// 对象克隆,student3和student指向不同的对象 修改student3的name属性,student的name属性不会改变
Student student3 = new Student();
student3 =  student.clone();
student3.setName("王五");
System.out.println(student);

浅拷贝和深拷贝

上述的克隆方法是浅拷贝

  • 浅拷贝:如果属性中存在引用类型,拷贝的是属性对象的地址,而非重新创建
  • 深拷贝:如果属性中存在引用类型,会重新创建一个属性对象,将新的属性对象赋值给克隆对象

在这里插入图片描述
在这里插入图片描述

深拷贝的简单实现

  • 如果引用类型的层级不深,而且已知哪些属性是引用类型,你可以手动地拷贝所有的引用属性
@Override
public Student clone() throws CloneNotSupportedException {
    Student cloneStudent =  (Student) super.clone();
    ArrayList cloneScores = (ArrayList) scores.clone();
    cloneStudent.setScores(cloneScores);
    return cloneStudent;
}

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

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

相关文章

蓝桥杯每日一题:约数个数(质因数)

题目描述: 输入 n 个整数,依次输出每个数的约数的个数。 输入格式 第一行包含整数 n。 第二行包含 n 个整数 ai。 输出格式 共 n 行,按顺序每行输出一个给定整数的约数的个数。 数据范围 1≤n≤1000, 1≤ai≤10^9 输入样例&#xff…

coreldraw是什么软件?最新中文2024版本cdr有哪些功能

CorelDRAW,通常也被称为CDR,是由加拿大Corel公司出品的一款平面设计软件。该软件以其强大的矢量图形制作和排版功能而著称,主要面向绘图设计师和印刷输出人员。 CorelDRAW提供了丰富的绘图工具,包括圆形、矩形、多边形、方格、螺…

FJSP:小龙虾优化算法(Crayfsh optimization algorithm,COA)求解柔性作业车间调度问题(FJSP),提供MATLAB代码

一、柔性作业车间调度问题 柔性作业车间调度问题(Flexible Job Shop Scheduling Problem,FJSP),是一种经典的组合优化问题。在FJSP问题中,有多个作业需要在多个机器上进行加工,每个作业由一系列工序组成&a…

Linux-线程知识点

目录 线程与进程区别pthread库接口介绍pthread_createpthread_self和syscall(SYS_gettid);pthread_equal测试主线程的栈空间大概是多大pthread_setname_nppthread_exitpthread_join为什么要连接退出的线程 pthread_detach 线程与进程区别 进程是一个动态的实体,有自…

java之static详细总结

static也叫静态,可以修饰成员变量、成员方法。 成员变量 按照有无static分为两种: 类变量:static修饰,属于类,与类一起加载一次,在内存中只有一份,会被类的全部对象共享实例变量(…

【C++ STL有序关联容器】set 集合

文章目录 【 1. 基本原理 】【 2. set 的定义 】2.1 调用默认构造函数,创建空的 set 容器2.2 在创建 set 容器的同时,对其进行初始化2.3 拷贝构造的方式创建2.4 取已有 set 容器中的部分元素,来初始化新 set 容器2.5 修改排序规则的方式创建 …

web安全学习笔记(6)

记一下第十节课的内容。 一.PHP语言中的if else判断 语法和c语言中非常类似,不再赘述,也可以使用if...elseif...elseif...else 1.True和False 2.,和 一个等号是赋值 两个等号是比较 三个等号是全等(内容相等,数…

职场中的情绪管理:如何应对工作中的愤怒情绪?

在职场中,我们常常会遇到一些让我们感到愤怒的事情。或许是同事的不配合,或许是上司的不理解,又或许是客户的无理取闹。然而,作为一个职业人,我们需要学会如何管理自己的情绪,尤其是愤怒情绪,以…

linux文件权限与数字转化

chmod命令——change mode,可以对特定文件文件夹权限进行更改 这里我们看到,当执行了chmod u-x try.sh后,try文件底色变为白色,即为其执行权限被“减去” 在linux系统中,权限的减去是通过权限的数字表示来实现的&#…

elment UI el-date-picker 月份组件选定后提交后台页面显示正常,提交后台字段变成时区格式

需求&#xff1a;要实现一个日期的月份选择<el-date-picker :typeformData.dateType :value-formatdateFormat v-modelformData.leaveFactoryDateplaceholder选择月份></el-date-picker>错误示例&#xff1a;将日期显示类型(type)dateType或将日期绑定值的格式(val…

016——DHT11驱动开发(基于I.MX6uLL)

目录 一、 模块介绍 1.1 简介 1.2 电路描述 1.3 通信协议 二、 驱动程序 三、 应用程序 四、 上机实验 一、 模块介绍 1.1 简介 DHT11 是一款可测量温度和湿度的传感器。比如市面上一些空气加湿器&#xff0c;会测量空气中湿度&#xff0c;再根据测量结果决定是否继续加…

P8749 [蓝桥杯 2021 省 B] 杨辉三角形

[蓝桥杯 2021 省 B] 杨辉三角形 题目描述 下面的图形是著名的杨辉三角形: 如果我们按从上到下、从左到右的顺序把所有数排成一列&#xff0c;可以得到如下数列&#xff1a; 1 , 1 , 1 , 1 , 2 , 1 , 1 , 3 , 3 , 1 , 1 , 4 , 6 , 4 , 1 , … 1,1,1,1,2,1,1,3,3,1,1,4,6,4,1, …

LeetCode 1483.树节点的第 K 个祖先:树上倍增

【LetMeFly】1483.树节点的第 K 个祖先&#xff1a;树上倍增 力扣题目链接&#xff1a;https://leetcode.cn/problems/kth-ancestor-of-a-tree-node/ 给你一棵树&#xff0c;树上有 n 个节点&#xff0c;按从 0 到 n-1 编号。树以父节点数组的形式给出&#xff0c;其中 paren…

KeyguardClockSwitch的父类

KeyguardClockSwitch 定义在KeyguardStatusView中, mClockView findViewById(R.id.keyguard_clock_container);KeyguardClockSwitch的父类为&#xff1a; Class Name: LinearLayout Class Name: KeyguardStatusView Class Name: NotificationPanelView Class Name: Notificat…

六、从零实战企业级K8S本地部署ThingsBoard专业版集群

1、从 docker hub 拉取 ThingsBoard PE 映像(所有节点) 1.1、查看k8s信息(主节点) kubectl cluster-info #查看k8s集群信息 kubectl get node #查看节点信息 kubectl get pod -A #查看内部组件1.2、从 docker hub 拉取 ThingsBoard PE 映像(所有…

C语言进阶课程学习记录-第24课 - #pragma 使用分析

C语言进阶课程学习记录-第24课 - #pragma 使用分析 #pragma实验-#pragma messagecmd窗口运行 实验-pragma oncebcc编译报错gcc编译成功global.h代码优化 #pragma pack实验BCC编译器输出 小结 本文学习自狄泰软件学院 唐佐林老师的 C语言进阶课程&#xff0c;图片全部来源于课程…

docker笔记(二):镜像、容器数据卷

四、 docker镜像 4.1 镜像 镜像是一种轻量级、可执行的独立软件包&#xff0c;用来打包软件运行环境和基于运行环境开发的软件&#xff0c;它包含运行某个软件所需的所有内容&#xff0c;包括代码、库、环境变量和配置文件 所有的应用&#xff0c;直接打包docker镜像就可以直…

BPMNJS 在原生HTML中的引入与使用

BPMNJS 在HTML中的引入与使用 在网上看到的大多是基于vue使用BPMN的示例或者教程&#xff0c;竟然没有在HTML使用的示例&#xff0c;有也是很简单的介绍核心库的引入和使用&#xff0c;并没有涉及到扩展库。于是简单看了下&#xff0c;真的是一波三折&#xff0c;坎坎坷坷。不…

MobTech积极参与鸿蒙生态建设,HarmonyOS NEXT鸿蒙星河版产品即将发布

1月18日&#xff0c;在鸿蒙生态千帆启航仪式上&#xff0c;华为宣布HarmonyOS NEXT鸿蒙星河版开发者预览正式面向开发者开放申请。被称为“纯血鸿蒙”的鸿蒙星河版将实现原生精致、原生易用、原生流畅、原生安全、原生智能、原生互联6大极致原生体验。 作为深耕开发者服务领域…

二分法题集1

1 二分查找 分析&#xff1a; 这是一道很简单的二分法题&#xff0c;定义两个指针和中间值middle&#xff0c;判断middle对应数组值与目标值的大小关系&#xff0c;从而对left和right进行修改。由于太过基础&#xff0c;代码简单基础就不多赘述。 目录 1 二分查找 分析&…