TypechoJoeTheme

Clover 的博客

统计
登录
用户名
密码
/
注册
用户名
邮箱

CloverYou

日出于东却落于西,相识人海却散于席。

24、Java Object类

2022-01-02
/
0 评论
/
16 阅读
/
正在检测是否收录...
01/02

常用方法

负责对象克隆的。

Protected Object clone();

获取对象哈希值的一个方法

int hashCode();

判断两个对象是否相等

Boolean equals(Object obj);

将对象转换成字符串形式

String toString();

垃圾回收器负责调用的方法

protrcted void finalize();

toString

关于Object中的toString方法

  1. 源代码

    public String toString() {
      return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }

源码上toString方法的默认实现是:
类名@对象的内存地址转换为十六进制的形式

  1. SUN公司设计toString方法的目的是什么?作用是什么?

    • toString方法的设计目的是:通过调用这个方法可以将一个Java对象转换成字符串表示形式
  2. SUN公司开发Java语言的时候,建议所有的子类都去重写toString方法。toString方法应该是一个简洁的、详实的、易阅读的。
  3. 输出一个引用时,会自动调用该引用的toString方法
    *打印引用时,例如有个引用a
System.out.println(a); 

由于每个类都默认继承了Object对象,println底层使用了多态: PrintStream.class

public void println(Object x) {
  String s = String.valueOf(x);
  ...
}

可见println源码调用了String.valueOf(): String.class

public static String valueOf(Object obj) {
  return (obj == null) ? "null" : obj.toString();
}

obj.toString()由此可见,只要obj是一个Object类型,那么就一定有toString()方法,而所有class,都默认继承了Object

equals

关于Object中的equals方法

  1. equals 源码

    public boolean equals(Object obj) {
      return (this == obj);
    }

以上是equals方法的默认实现

  1. SUN公司设计equals方法的目的是什么?

    • 以后编程当中,都要通过equals方法来判断两个对象是否相等。equals方法是判断两个对象是否相等的。
    • 判断两个java对象是否相等,不能使用“==”,因为这比较的是两个对象的内存地址。例如:

      B b = new B(2, 3);
      B b2 = new B(2, 3);
      if (b == b2)// false
 在`Object`中的`equals`方法采用的是“\==”来判断两个对象是否相等。需要判断的是两个对象的内容是否相等,所以java默认的`equals`无法实现需求,所以需要重写`equals`。如何去重写这个`equals`需要按照你当前的需求来进行重写,例如比较`id`是否相等:
class B {
  public int id;
  public B(int id){
    this.id = id;
  }
  public boolean equals(Object obj){
    if (this instanceof obj && obj != null){
      return (this.id == ((B)obj).id);
    }
    return false;
  }
}
B b = new B(2);
B b2 = new B(2);
b.equals(b2); // true

Java中基本数据类型可以使用"=="来进行判断

Java中引用数据类型统一使用equals方法来进行判断

String 类中已重写equals方法

finalize

关于Object类中的finalize方法。

  1. 在Object类中的源代码

    protected void finalize() throws Throwable { }
  2. finalize方法只有一个方法体,里面没有任何代码,而且这个方法是protected修饰的。
  3. 这个方法不需要手动调用,JVM的垃圾回收器负责调用这个方法。
  4. finalize方法执行时:
    当一个Java对象即将被垃圾回收器回收的时候,垃圾回收器负责调用finalize方法。
  5. finalize方法实际上是一SUN公司为java程序员准备的一个时机,垃圾销毁机。如果希望在对象销毁时执行一段代码的话,这段代码要写到finalize方法。
  6. Java中的垃圾回收器是不轻易启动的,垃圾太少或者时间没到,种种条件下,有可能启动,也有可能不启动。

可使用System.gc();方法建议垃圾回收器启动

JAVA学习笔记
朗读
赞(0)
版权属于:

Clover 的博客

本文链接:

https://www.ctong.top/index.php/archives/37/(转载时请注明本文出处及文章链接)

评论 (0)
CloverYou
日出于东却落于西,相识人海却散于席。
88 文章数
11 评论量
IP信息

人生倒计时

今日已经过去小时
这周已经过去
本月已经过去
今年已经过去个月

最新回复

  1. 缓存一致性 - 点击领取
    2022-01-06
  2. 宝宝
    2022-01-02

标签云