Object类
Object类是Java中所有类的基类
学习Object类就是在学习他的方法
构造方法:
可以直接实例化
Object()
只需要学习三个方法
String
toString()
返回对象的字符串表示形式
public String toString()
返回对象的字符串表示形式。 一般来说,
toString
方法返回一个“textually代表”这个对象的字符串。 结果应该是一个简明扼要的表达,容易让人阅读。 建议所有子类覆盖此方法。该
toString
类方法Object
返回一个由其中的对象是一个实例,该符号字符的类的名称的字符串
@` ”和对象的哈希码(内存地址)的无符号的十六进制表示。 换句话说,这个方法返回一个等于下列值的字符串:getClass().getName() + '@' + Integer.toHexString(hashCode())
结果
对象的字符串表示形式。
package com.qfedu.a_object;
class Person {
String name;
int age;
//person类是Object类子类不? 是!!!
//
boolean
equals(Object obj)
指示一些其他对象是否等于此。
boolean eaqual(Object obj);
public boolean equals(Object obj) {
return (this == obj);
}Object 类下面的方法比较是两个对象的地址。不看内容的
为啥String类下面的equals方法比较的是内容呢?String类继承了Object
equals方法重写了Object类下面的。为啥重写?
当父类的需求,满足不了子类的需求的时候要重写父类的方法
需求:比较两个对象的内容是否一样? 如果两个对象的内容一样返回一个true。反之返回false
package com.qfedu.a_object;
import java.util.Objects;
class Student {
String name;
int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
//重写equlas,要求去比较内容,如果内容一样的额话,返回true
//stu1.equals(stu2)
//stu2赋值给了 o 向上转型 Object o =new Student();
package com.qfedu.a_object;
import java.util.Objects;
class Student1 {
String name;
int age;
public Student1(String name, int age) {
this.name = name;
this.age = age;
}
//重写equlas,要求去比较内容,如果内容一样的额话,返回true
int hashCode();
哈希码值:在Object类下面,将内存地址(十六进制的值)转为十进制的值,此时这个十进制的值就叫hash码。
返回对象的哈希码值。 支持这种方法是为了散列表,如
hashCode
的注意事项是:
只要在执行Java应用程序时多次在同一个对象上调用该方法,
hashCode
方法必须始终返回相同的整数,前提是修改了对象中equals
比较中的信息。 该整数不需要从一个应用程序的执行到相同应用程序的另一个执行保持一致。如果根据
equals(Object)
方法两个对象相等,则在两个对象中的每个对象上调用hashCode
方法必须产生相同的整数结果。不要求如果两个对象根据
尽可能多的合理实用,由类别
Object
定义的hashCode方法确实为不同对象返回不同的整数。 (hash码的值通常通过将对象的内部地址转换为整数来实现,但Java的编程语言不需要此实现技术。)
package com.qfedu.a_object;
class Cat {}
public class Demo4 {
public static void main(String[] args) {
Cat cat1 = new Cat();
Cat cat2 = new Cat();
System.out.println(cat1.hashCode());
System.out.println(cat2.hashCode());
String str = new String("a");
String str1 = new String("b");
String str2 = new String("a");
//现在真他娘的尴尬,Object类的hash值是内存地址十进制的转换
//只要你内U存地址不一样,hash值一定不一样
//但是你看看str和str2 ,内存地址不一样,但是
//hash值是一样的?咋回事?在String类中重写了hashCode
//方法
System.out.println(str.hashCode());//97
System.out.println(str1.hashCode());//98
System.out.println(str2.hashCode());//97
}
}
请注意,无论何时重写equals方法,通常需要重写
hashCode
方法,以便维护hashCode
方法的通用合同,该方法规定相等的对象必须具有相等的哈希码
package com.qfedu.a_object;
import java.util.Objects;
class Dog {
int id;
String name;
public Dog(int id, String name) {
this.id = id;
this.name = name;
}
public boolean equals (Object o) {
if (this == o) {
return true;
}
if (o instanceof Dog) {
Dog dog = (Dog)o;
return this.id == dog.id && dog.name.equals(this.name);
}
return false;
}
package com.qfedu.a_object;
import java.util.Objects;
class Panda {
int id;
String name;
public Panda(int id, String name) {
this.id = id;
this.name = name;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~