#yyds干货盘点# 面试高频题(Object类常用方法)

宝剑锋从磨砺出,梅花香自苦寒来。这篇文章主要讲述#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;


@Override
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;


@Override
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;

@Override
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
//程序员大彬

下面介绍下浅拷贝和深拷贝。
浅拷贝【#yyds干货盘点# 面试高频题(Object类常用方法)】拷?对象和原始对象的引?类型引用同?个对象。
以下例子,Cat对象里面有个Person对象,调用clone之后,克隆对象和原对象的Person引用的是同一个对象,这就是浅拷贝。
public class Cat implements Cloneable
private String name;
private Person owner;

@Override
protected Object clone() throws CloneNotSupportedException
return super.clone();


public static void main(String[] args) throws CloneNotSupportedException
Cat c = new Cat();

    推荐阅读