美文网首页
学习笔记之Object类(Java8)

学习笔记之Object类(Java8)

作者: lirudong | 来源:发表于2019-07-22 10:06 被阅读0次

1.Object类中有哪几个方法?
2.hashCode方法有什么用?
3.hashCode()equals()的区别?

如果你不是很清楚请往下看

首先有一下几个方法

屏幕快照 2019-07-22 上午9.10.17.png
  • hashCode()equals() 函数用来判断对象是否相同
  • wait()
  • toString()gtClass()
  • clone()
  • finalize()用于垃圾回收
  • registerNatives()本地注册

1 hashCode和equals函数用来判断对象是否相同

首先参考一下别人的博客:http://blog.csdn.net/hla199106/article/details/46907725

1.1 ==

  • 基本数据类型:比较的是它们的值。
  • 引用类型(类、接口、数组):比较的是它们内存中存在的地址。

***对象是放在堆栈中的,栈中存放的是对象的引用(地址),由此可见==是对栈中的值进行比较的。如果要对栈中的对象内容进行比较的话,就要重写equals()方法了

1.2 equals()
先看一下默认的方法,判断是不是同一个对象

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

以下是String的equals方法

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

判断流程为:
即String中equals方法判断相等的步骤是:

1、若A==B 即是同一个String对象 返回true
2、若对比对象是String类型则继续,否则返回false
3、判断A、B长度是否一样,不一样的话返回false
4、逐个字符比较,若有不相等字符,返回false

重新实现equals()方法需要满足以下5个特性:自反,对称,传递,一致,非空性

1.3 、hashcode()

  hashCode() 方法返回的就是一个数值,从方法名称上可以看出,其目的就是生成一个hash码,hash码的主要用途就是在对对象进行散列的时候作为key输入,据此可以推断出我们需要每个对象的hash码尽可能不相同,这样才可能保证散列的存取性能。哈希算法也称为散列算法,是将数据依特定的算法直接指定到一个地址上。
   初学者可以这样理解,hashCode方法实际上返回的就是对象存储的物理地址(实际可能并不是)。

1.4 hashcode() 和 equals() 的区别

1、如果两个对象equals(),Java运行时环境会认为他们的hashcode一定相等。 
2、如果两个对象不equals,他们的hashcode有可能相等。 
3、如果两个对象hashcode相等,他们不一定equals。 
4、如果两个对象hashcode不相等,他们一定不equals。
2 wait(),wait(long),wait(long,int),notify(),notifyAll()
这几个函数体现的是Java的多线程机制
在使用的时候要求在synchronize语句中使用
wait()用于让当前线程失去操作权限,当前线程进入等待序列
notify()用于随机通知一个持有对象的锁的线程获取操作权限
notifyAll()用于通知所有持有对象的锁的线程获取操作权限
wait(long) 和wait(long,int)用于设定下一次获取锁的距离当前释放锁的时间间隔
3 toString()和getClass()

toString()返回一个String对象,用来标识自己
如Object默认

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

getClass()返回一个Class对象。

4 clone()

使用clone方法的几个条件:

1)在派生类中实现Cloneable借口。
2)为了获取对象的一份拷贝,我们可以利用Object类的clone方法。
3)在派生类中覆盖积累的clone方法,声明为public。
4)在派生类的clone方法中,调用super.clone()。

具体:http://www.cnblogs.com/gw811/archive/2012/10/07/2712252.html

5 finalize()用于在垃圾回收
6 registerNatives() 本地注册

native修饰的方法表示本地方法(跟系统有关,也可以理解为这个方法不是在java中实现的),据说这个方法在一个名为java.dll的动态库文件中。Object类中第40行(我的是jdk1.8)开始的 static{ registerNatives(); } 表示的是在类被加载时,调用 registerNatives()方法进行一些跟系统有关的方法调用,而这个方法的实现就在java.dll中(里面会根据不同系统来执行不同的底层操作)。

相关文章

  • 学习笔记之Object类(Java8)

    1.Object类中有哪几个方法?2.hashCode方法有什么用?3.hashCode()和equals()的区...

  • ##Java学习笔记之基础类库笔记

    Java学习笔记之基础类库笔记 Object 所有类,数组,枚举类的父类 Objects(Java7新增) 工具类...

  • Java8学习笔记目录

    Java8学习笔记 -- 接口的默认方法与静态方法 Java8学习笔记 -- Lambda表达式,Function...

  • JDK 学习笔记 之Object类中方法

    1. 为什么使用 java.lang 包下的所有类,都不需要手动导入 因为编译器会默认导入java.lang 包,...

  • 1.1 Object类源码阅读笔记(java8)

    在正式开始阅读这个Object类之前,其实之前已经看过源码了,只是一直不知道用什么方式来呈现出我看源码的方式,所以...

  • Java8学习笔记之Optional类入门

    1、如何为缺失的值建模 示例: public class Person { private Car car; ...

  • Optional 类

    Optional 类 声明:java8新特性系列为个人学习笔记,参考地址点击这里,侵删!! 到目前为止,臭名昭著的...

  • Scala对象和类小结

    该文章是CSDN中Scala对象(Class)和类(Object)学习笔记,方便日后查阅。如要查阅源文档,请点击这...

  • Java8学习笔记 -- Optional类

    在开发过程中,空指针异常是最常见,不过也是比较容易修改的。尽管如此,为了避免空指针,我们可能会加入大量的检测逻辑。...

  • Java8学习笔记 -- Stream类

    这里的Stream并不是指类似于IO中的输入输出流之类的一种实际概念,更多的是指一种编程思想,它本身并不执行什么特...

网友评论

      本文标题:学习笔记之Object类(Java8)

      本文链接:https://www.haomeiwen.com/subject/cjtilctx.html