#yyds干货盘点# 面试高频题:Object类常用方法
Posted 程序员大彬
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#yyds干货盘点# 面试高频题:Object类常用方法相关的知识,希望对你有一定的参考价值。
Object常用方法
Java面试经常会出现的一道题目,Object的常用方法。下面给大家整理一下。
object常用方法有:toString()、equals()、hashCode()、clone()等。
toString
默认输出对象地址。
public class Person
private int age;
private String name;
public Person(int age, String name)
this.age = age;
this.name = name;
public static void main(String[] args)
System.out.println(new Person(18, "程序员大彬").toString());
//output
//me.tyson.java.core.Person@4554617c
可以重写toString方法,按照重写逻辑输出对象值。
public class Person
private int age;
private String name;
public Person(int age, String name)
this.age = age;
this.name = name;
public String toString()
return name + ":" + age;
public static void main(String[] args)
System.out.println(new Person(18, "程序员大彬").toString());
//output
//程序员大彬:18
equals
默认比较两个引用变量是否指向同一个对象(内存地址)。
public class Person
private int age;
private String name;
public Person(int age, String name)
this.age = age;
this.name = name;
public static void main(String[] args)
String name = "程序员大彬";
Person p1 = new Person(18, name);
Person p2 = new Person(18, name);
System.out.println(p1.equals(p2));
//output
//false
可以重写equals方法,按照age和name是否相等来判断:
public class Person
private int age;
private String name;
public Person(int age, String name)
this.age = age;
this.name = name;
public boolean equals(Object o)
if (o instanceof Person)
Person p = (Person) o;
return age == p.age && name.equals(p.name);
return false;
public static void main(String[] args)
String name = "程序员大彬";
Person p1 = new Person(18, name);
Person p2 = new Person(18, name);
System.out.println(p1.equals(p2));
//output
//true
hashCode
将与对象相关的信息映射成一个哈希值,默认的实现hashCode值是根据内存地址换算出来。
public class Cat
public static void main(String[] args)
System.out.println(new Cat().hashCode());
//out
//1349277854
clone
java赋值是复制对象引用,如果我们想要得到一个对象的副本,使用赋值操作是无法达到目的的。Object对象有个clone()方法,实现了对
象中各个属性的复制,但它的可见范围是protected的。
protected native Object clone() throws CloneNotSupportedException;
所以实体类使用克隆的前提是:
- 实现Cloneable接口,这是一个标记接口,自身没有方法,这应该是一种约定。调用clone方法时,会判断有没有实现Cloneable接口,没有实现Cloneable的话会抛异常CloneNotSupportedException。
- 覆盖clone()方法,可见性提升为public。
public class Cat implements Cloneable
private String name;
protected Object clone() throws CloneNotSupportedException
return super.clone();
public static void main(String[] args) throws CloneNotSupportedException
Cat c = new Cat();
c.name = "程序员大彬";
Cat cloneCat = (Cat) c.clone();
c.name = "大彬";
System.out.println(cloneCat.name);
//output
//程序员大彬
下面介绍下浅拷贝和深拷贝。
浅拷贝
拷⻉对象和原始对象的引⽤类型引用同⼀个对象。
以下例子,Cat对象里面有个Person对象,调用clone之后,克隆对象和原对象的Person引用的是同一个对象,这就是浅拷贝。
public class Cat implements Cloneable
private String name;
private Person owner;
protected Object clone() throws CloneNotSupportedException
return super.clone();
public static void main(String[] args) throws CloneNotSupportedException
Cat c = new Cat();
高频面试java高级进阶之锁?与CAS详解#yyds干货盘点##yyds干货盘点# 内鬼消息:串联高频面试问题,值得一看!
#yyds干货盘点#2021年度Java并发编程面试真题&高频知识点汇总