Java-Object类
-
Object类
-
Object 是类层次结构的根类,每个类都使用Object 作为父类(超类)
-
所有对象(包括数组)都实现这个类的方法
-
它具备所有对象都具备的共同内容
-
-
Object类位于哪个包下
-
类Object 在java.lang包下
-
知识点2-Object类中的方法
- Object类中toString方法: public String toString()
-
Course类中重写Object的toString()方法
-
Object类中equals方法: public boolean equals(Object obj)
-
Object类中定义了equals方法【public boolean equals(Object obj) 】,用来比较两个对象的虚地址,如果虚地址相同则返回true,否则返回false;
-
Object类中hashCode方法: public int hashCode()
-
两个引用的虚地址相同时,hashCode返回相同的值,否则返回不同的值
package com.tjetc.myobject;public class Course {
private String name;
private double score;
public Course(String name, double score) {
this.name = name;
this.score = score;
}//打印name和score的值
//方案1:System.out.println()打印拼接对象属性值,重复代码多
//方案2:重写toString()方法,直接打印对象,代码不会重复写(方案好)
@Override
public String toString() {
return "Course{" +
"name='" + name + '\'' +
", score=" + score +
'}';
}
//重写equals和hashcode 有个原则
//1、equals和hashcode要同时重写
//2、重写的结果:两个对象比较 equals返回true,hashcode返回必须是true
// 两个对象比较 hashcode返回true,equals返回的不一定是true(可以是true也可以false)
//平常只判断两个对象相等,使用equals方法,不使用hashcode,
//在集合类中,判断两个对象对相等,优先是有hashcode,如果hashcode能判断false结果,就不用调用equals方法,hashcode返回true的时 然后才使用equals
//一般情况下,java会大量使用集合,所以要符合集合判断两个对象相等的逻辑
//重写hashcode,依据Course的name
@Override
public int hashCode() {
return this.name.hashCode();
}
//重写equals可以按照业务特殊需求来定制的判断是否相等
//但是 == 没法定制,就是判断2个对象的地址是否相等
@Override
public boolean equals(Object o) {
//参数o 表示传进来的对象 ,本类对象的引用this比较
//需求:业务上提个要求,两个课程如果名称一样,就认为是相等
if (o == null) { //null直接返回false
return false;
} else if (!(o instanceof Course)) { //传进来的对象不是Course类的对象,返回false
return false;
} else {
//判断对象的name字符串是否相等
if (this.name == ((Course) o).name) {
return true;
} else {
return false;
}
}
}
public static void main(String[] args) {
//创建2个课程对象
Course c1 = new Course("java", 90);
Course c2 = new Course("java", 90);
//打印对象,调用toString方法(Object的toString)
System.out.println(c1);
System.out.println(c2);
//对象的toString方法
System.out.println("========================");
//Object的toString方法
//System.out.println(c1.toString());
//System.out.println(c2.toString());
System.out.println("=================对象相等==================");
Course c3 = c1; //把c1的地址值赋给c3
//判断2个对象的地址值是否相等,使用==判断对象相等并没有调用equals方法,==表示判断2个对象的地址值是否相等
System.out.println(c1 == c2); //false
System.out.println(c1 == c3); //true
System.out.println("==================equals================");
//Object的equals就是比较2个对象的地址值是否相等
//System.out.println(c1.equals(c2)); //false
//重写了Course 的equals方法(只要name相等就是认为是相等)
System.out.println(c1.equals(c2)); //true
System.out.println(c1.equals(c3)); //true
System.out.println("=================hashcode=======================");
System.out.println(c1.hashCode());
System.out.println(c2.hashCode());
System.out.println(c3.hashCode());
System.out.println(Integer.toHexString(c2.hashCode()));
}
}
-
finallize方法(了解)
-
Java 技术允许使用finalize() 方法在垃圾收集器将对象从内存中清除出去之前,做必要的清理工作。这个方法是由垃圾收集器在确定个对象没有被引用时对这个对象调用的。它是在Object 类中定义的,因此所有的类都继承了它。子类覆盖finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话