#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;


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

下面介绍下浅拷贝和深拷贝。

浅拷贝

拷⻉对象和原始对象的引⽤类型引用同⼀个对象。
以下例子,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();
高频面试java高级进阶之锁?与CAS详解#yyds干货盘点#

#yyds干货盘点# 内鬼消息:串联高频面试问题,值得一看!

#yyds干货盘点#2021年度Java并发编程面试真题&高频知识点汇总

#yyds干货盘点#2021年度Java中间件面试真题&高频知识点汇总

#yyds干货盘点#数据库面试题 2022

#yyds干货盘点# Java并发面试题第二弹