专栏首页Java知其所以然Object 类和垃圾回收机制

Object 类和垃圾回收机制

点击上方蓝字可以关注我哦!

Object 类

Object 类是所有 Java 类的根基类

如果在类的声明中未使用 extends 关键字指明其基类,则默认基类为 Object

public class Person {

        ...

}

等价于:

public class Person extends Object {

...

}

toString 方法

Object 类中定义有 public String toString() 方法,其返回值是 String 类型,描述当前对象的有关信息。

在进行 String 与其它类型数据的连接操作时(如:System.out.println(“info”+person)),将自动调用该对象类的 toString() 方法

Object 类中 toString 方法的源代码是:

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

默认是打印:类名+哈希码(根据对象地址计算得出 )

可以根据需要在用户自定义类型中重写 toString() 方法。比如 String 类就重写了 toString 方法,源代码如下:

public String toString() {
        return this;
}

equals 方法

Object 类中定义有:public boolean equals(Object obj) 方法 提供定义对象是否“相等”的逻辑。

Objectequals 方法 定义为:x.equals ( y ) 当 x 和 y 是同一个对象的应用时返回 true 否则返回 false

查看 Object 类中的 equals 方法源代码可以看出:

JDK 提供的一些类,如 String,Date 等,重写了 Objectequals 方法,调用这些类的 equals 方法, x.equals (y) ,当 x 和 y 所引用的对象是同一类对象且属性内容相等时(并不一定是相同对象,意思就是并不一定是同一个对象的引用),返回 true 否则返回 false。

String 类的 equals 方法显然比较的是数组中的 char 值是否相等。

源代码:

 public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }

垃圾回收机制(Garbage Collection)

Java 的内存管理实际上指的就是对象的管理,其中包括对象空间的分配和释放。

对象空间的分配

使用 new 关键字创建对象即可

对象空间的释放

将对象赋值 null,即该对象没有引用指向时。垃圾回收器将负责回收所有”不可达”对象的内存空间。

理解

c++ 的内存回收都需要自己手动的去释放,这样编写起来很让程序猿头疼。

Java 有垃圾回收机制,所以 Java 程序猿就不必要去太关注内存释放的问题。

把内存当作一个餐厅,每个顾客来吃饭,吃完饭直接就可以走,不需要去收拾桌子。有一个人会监控餐厅的桌子,发现顾客走了,桌子上没人,就会去把桌子收拾干净。这个人就是垃圾回收机制。

要点

1、程序员无权调用垃圾回收器。

2、程序员可以通过 System.gc()。通知 GC 运行,但是 Java 规范并不能保证立刻运行。

3、finalize 方法,是 Java 提供给程序员用来释放对象或资源的方法,但是尽量少用。

本文分享自微信公众号 - Java知其所以然(gh_37a1335e2608)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-07-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Kotlin---标准扩展函数

    除了自定义扩展之外,Kotlin中也定义了很多的扩展函数,而这些扩展函数的接收类型是范型,也就是所有对象都可以使用。这些标准的扩展函数都放在了Standard....

    None_Ling
  • 前端入门20-JavaScript进阶之异步回调的执行时机声明正文-异步回调的执行时机

    作为一个前端小白,入门跟着这几个来源学习,感谢作者的分享,在其基础上,通过自己的理解,梳理出的知识点,或许有遗漏,或许有些理解是错误的,如有发现,欢迎指点下。

    请叫我大苏
  • 前端入门14-JavaScript进阶之继承声明正文-继承

    作为一个前端小白,入门跟着这几个来源学习,感谢作者的分享,在其基础上,通过自己的理解,梳理出的知识点,或许有遗漏,或许有些理解是错误的,如有发现,欢迎指点下。

    请叫我大苏
  • java小知识,大智慧

    java知识面很多,如果想系统的学习java知识,最好是看完一本相关书籍,其实这本书籍不用是什么名人写的,只要他有几年的开发经验基本上可以写出一个入门级的jav...

    哲洛不闹
  • Netty 编码与数据的写入

    业务里的数据最终需要通过socket写回到客户端,我们写的业务方法都是面向对象来进行编码的,而channel底层传输的是字节,Netty通过定义encode...

    良辰美景TT
  • 前端入门21-JavaScript的ES6新特性声明正文-ES6新特性

    阮一峰的这本书,我个人觉得写得挺好的,不管是描述方面,还是例子,都讲得挺通俗易懂,每个新特性基本都还会跟 ES5 旧标准做比较,说明为什么会有这个新特性,这更于...

    请叫我大苏
  • Java 控制台程序 JDBC连接数据库

    首先下载mysql-connector jar包 https://dev.mysql.com/downloads/file/?id=480090

    赵哥窟
  • Java异常知识点思考与总结

    Java 中的异常可以是方法执行过程中引发的,也可以是通过 throw 语句手动抛出的。一旦程序运行过程中发生了异常,JRE 就会试图寻找异常处理程序来处理异常...

    happyJared
  • 跨专业转CS拿下百度java后台开发的干货分享

    人们总以为时间是一个小偷,偷走了我们所爱的一切。但,时间是先给予再拿走,每天都是一份礼物,每小时,每一分,每一秒。——《爱丽丝梦游仙境2》

    牛客网
  • Java|用 GitLab CI 进行持续集成:简介一些概念GitLab Runner.gitlab-ci.yml

    从 GitLab 8.0 开始,GitLab CI 就已经集成在 GitLab 中,我们只要在项目中添加一个 .gitlab-ci.yml 文件,然后添加一个 ...

    黄小怪

扫码关注云+社区

领取腾讯云代金券