Java Object 常用方法有哪些
每天敲Java代码的你,是不是偶尔会对着某个对象发呆——明明没写什么特别的方法,调用时却能自动返回一串字符、判断出两个对象是不是同一个?这些隐藏的功能,其实都来自Java里最基础的Object类。它就像所有Java类的“祖宗”,自带几个常用的“工具箱”方法,用好它们能让你少写很多冗余代码。
toString():给对象写个“自我介绍”
你肯定见过打印对象时输出的一串像com.example.User@1f32e575这样的字符串吧?这就是toString()方法的默认输出。它的作用就是把对象转成可读的字符串,方便调试或展示。

比如你写了一个User类,默认的toString()只会输出“类名+内存地址”,没人能看懂。这时候你只要重写这个方法,告诉它要输出什么就行:
`java
public class User {
private String name;
private int age;
// 重写toString(),返回用户的名字和年龄
@Override
public String toString() {
return "User{name='" + name + "', age=" + age + "}";
}
}
`
现在打印new User("小明", 18),输出就变成了User{name='小明', age=18},清晰多了。如果不重写,就会用默认的“地址串”,别人看了完全懵。
equals():判断两个对象“是不是一样”
很多人会把==和equals()搞混,其实这俩差得远。==是比内存地址,看是不是同一个东西;而equals()本来就是用来判断“内容是不是相等”的。
还是用刚才的User举例,两个不同的User实例,只要名字和年龄相同,你就想认为它们是“同一个人”,这时候就得重写equals():
`java
@Override
public boolean equals(Object o) {
// 先快速判断:如果是同一个对象,直接返回true
if (this == o) return true;
// 如果对象为空,或者类不一样,直接返回false
if (o == null || getClass() != o.getClass()) return false;
// 强转后比较属性
User user = (User) o;
return age == user.age && Objects.equals(name, user.name);
}
`
这时候new User("小明",18).equals(new User("小明",18))就会返回true,而用==比较的话,因为是两个不同的对象,会返回false。要是不重写equals(),它会默认用==的规则,根本达不到你要的“内容相等”的效果。
hashCode():给对象发个“唯一身份证”
hashCode()听起来很复杂,其实就是给对象算个“数字身份证”,主要用在HashMap、HashSet这类集合里。你可以理解为:集合要判断两个对象是不是重复,先看hashCode是不是一样,不一样就直接当不同对象,一样再用equals()确认,这样能大幅提高判断效率。
为什么要和equals()一起用?比如你重写了equals()判断名字和年龄,那hashCode也得跟着这俩属性算,不然会出问题。还是用User举例,重写equals后最好也重写hashCode:
`java
@Override
public int hashCode() {
return Objects.hash(name, age);
}
`
如果不重写,hashCode会用默认的内存地址值,哪怕两个对象的内容完全相同,hashCode也不一样,导致HashSet里出现重复数据。
getClass():查对象的“身份证类型”
这个方法的作用很简单,就是返回对象的类类型,也就是你new的时候写的那个类。比如new User().getClass()会返回User类的对象,你可以用它来判断两个对象是不是同一个类:
`java
User user = new User("小红", 20);
// 判断user是不是User类的实例
if (user.getClass() == User.class) {
System.out.println("这是一个用户对象");
}
`
它和instanceof有点像,但getClass()会精确判断是不是同一个类,而instanceof会包含子类,适合不同场景用。
这些方法虽然是Object自带的,但却是日常开发中用得最多的——不管是调试打印、集合去重,还是判断对象相等,几乎都绕不开它们。下次写类的时候,记得主动重写toString、equals和hashCode,能帮你少踩很多莫名的bug坑。