常用类第27天(equals90方法,finalize()方法,包装类,装箱和拆箱,基本类型转字符串类型)
equals()方法
public boolean equals(Object obj){}
- 默认实现为(this==obj),比较两个地址是否相同
- 可进行覆盖(也就是重写),比较两个对象的内容是否相同,重写步骤如下:
- 比较两个引用是否指向同一个对象
- 判断obj是否为null
- 判断两个引用指向的实际对象类型是否一致
- 强制类型转换
- 依次比较各个属性值是否相同
重写代码如下(可用Alt+Insert快捷键)
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return age == student.age && Objects.equals(name, student.name);
}
例:
Student s1 = new Student("张三", 23);
Student s2 = new Student("张三", 23);
Student s3=s1;
System.out.println(s1.equals(s2));
System.out.println(s1.equals(s3));
重写前结果:
重写后结果:
finalize()方法
- 当对象被判定为垃圾对象时,由JVM自动调用此方法,用以标记垃圾对象,进入回收队列
- 垃圾对象:没有有效引用指向此对象时,判定为垃圾对象
- 垃圾回收:由GC销毁垃圾对象,释放数据存储空间
- 自动回收机制:JVM的内存耗尽,一次性回收所有垃圾对象
- 手动回收机制:使用System.gc(),通知JVM执行垃圾回收
包装类
基本数据类型所对应的引用数据类型
Object可统一所有数据,包装类的默认值是null
基本数据类型 | 包装类型 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
char | Character |
装箱与拆箱
装箱:基本类型转换成引用类型
拆箱:引用类型转换成基本类型
//类型转换:装箱(将基本类型转成引用类型的过程)
int num1=18;
//使用Integer类创建对象
Integer integer1=new Integer(num1);
Integer integer2=Integer.valueOf(num1);
//类型转换:拆箱(将引用类型转成基本类型的过程)
Integer integer3=new Integer(100);
int num2= integer3.intValue();
浮点型数据也可以如此操作
float a1=3;
Float b1=new Float(a1);
Float b2=Float.valueOf(a1);
float a2=b1.floatValue();
jdk1.5版本之后可实现自动装箱及拆箱
//jdk1.5之后,提供自动装箱和拆箱,不需要手动做装封箱的操作
int num3=10;
Integer integer4=num3;
num3=integer4;
基本类型和字符串转换
基本类型转换为字符串类型
int num1=10;
//1,使用"+"
String s1=num1+"";
//2,使用toString(10代表转换为几进制)
String s2= Integer.toString(num1,10);
字符串类型转换为基本类型,使用parseXXX(XXX为需要装换成为的数据类型)
String s3="150";
int s3=Integer.parseInt(s3);
注意:字符串转为boolean类型时,"true"将会转成true,任何非"true"都会转换成false
String str1="true";
String str2="false";
String str3="rfger";
String str4="";
boolean bo1=Boolean.parseBoolean(str1);
boolean bo2=Boolean.parseBoolean(str2);
boolean bo3=Boolean.parseBoolean(str3);
boolean bo4=Boolean.parseBoolean(str4);
System.out.println(bo1);
System.out.println(bo2);
System.out.println(bo3);
System.out.println(bo4);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?