2022-07-23 第4组 蒋萍 Object的一些类
Object 类
是所有类的直接或间接父类;
一个类没有使用extends关键字明确标识继承关系,默认继承Object类;
目录
1、Object 类被子类常重写的方法
1.1 toString()
- 返回当前对象本身的有关信息,按字符串对象返回;
1.2 equals()
- 比较两对象是否是同一对象,是则返回true;
- 尽量比较引用数据类型不使用双等号
1.3 hashCode()
-
返回该对象的哈希码值 ;
一般与equals一起用,hash算法算出的一系列值 ,比较对象时
如果对象equals相等,hashcode也相等,是同一对象。
1.4 getClass()
- 获取当前对象所属类的信息,返回Class对象(反射机制);
note:
Object类的equals()方法:
— 操作符 ==
- 默认情况下,equals() 作用和 == 作用是一样的,都是比较是否为同一对象!!
- **简单数据类型,直接比较值。> 1==2 **为false
- 引用类型,比较两者是否为 同一对象;> 这时比较的是地址
- 没有对equals进行重写的类(比如我们自己写的类)就只能从Object类中继承equals方法,此时 equals方法 与 == 就也是等效的,除非我们在此类中重写equals() 。
更多可以参看:
https://www.cnblogs.com/zjc950516/p/7877511.html
2、 重写equals()
我们先看:
// 测试类
public static void main(String[] args) {
Stu s1=new Stu("张",18,50);
Stu s2=new Stu("张",18,50);
// 此时还没重写equals()
// ta与== 效果是相同的
System.out.println(s1==s2);// false
System.out.println(s1.equals(s2));// false
}
看equals() 重写源码:
@Override
public boolean equals(Object obj) {
return super.equals(obj);
}
- 现在告诉计算机一个新的比较规则:
用你传过来的obj 拿来和 this(当前的学员对象)比较如果名字和id相同就认为是一个对象;
// 重写equals()
@Override
public boolean equals(Object obj) {
// 是学生对象
if (this == obj){
return true;
}
// A instanceof B 判断A是否属于B类型
// 不是学生类型
if (!(obj instanceof Stu)){
return false;
}
// 是学生类型——> 转换称学生对象
Stu s=(Stu)obj;
// 比较String 内容的用equals()
if (this.id==s.id && this.name.equals(s.name)){
return true;
}else {
return false;
}
}
// 看此时的测试类
public static void main(String[] args) {
Stu s1=new Stu("张",18,50);
Stu s2=new Stu("张",18,50);
System.out.println(s1==s2);// false-->地址不同
System.out.println(s1.equals(s2));// true
// 这时这里的equals已经重写过了,现在比较的是两个字符串内容是否相同!!!
// 此时 true--> 地址不同,但内容是相同的
}
instanceof 操作符用于判断某一对象是否属于某一类型;
其实就是说String 这个字符串类已经被JDK重写过了,所以它的方法不是比较两字符串是不是指向同一对象,而是两内容是否相同;
下面继续看:toString()
System.out.println(s1.toString());
//inherit.Stu@71be98f5——> 对象地址
我不想要这样的结果,现在我希望输出学生对象的字符串可以表示:学生的姓名
就是我输入s1.toString 希望能看到 "张三"
同理,我们思路与重写equals()是一样的:
2、重写toString()
IDEA里快捷键 Alt+insert 非常快,需求要返回什么,就 return 什么
@Override
public String toString() {
return "Stu{" +
"name='" + name + '\'' +
", age=" + age +
", id=" + id +
'}';
}
// 打印
System.out.println(s1.toString());
// Stu{name='张', age=18, id=50}
```****
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY