皮皮安学Java第十二天

写在前面

今天没实战,花了一下午把Java常用类看完了。闲聊结束。

今日所学

equals()方法
与==的区别

  1. ==判断是否引用同一个对象,比较的栈中的值。

  2. equals如果没有被重写,则默认和==无区别。

  3. 如果重写了equals,则按重写后的比较规则进行判断。
    说明:
    自定义类可以重写equals方法来实现对特定字段等值的判断。
    可以通过开发工具快速重写equals方法。

    hashCode()方法
    返回对象的hashCode值,及哈希值。

1.hashCode是为了支持数据结构的哈希表。
2.如果没有重写该方法,默认返回对象的地址。
3.重写equals()方法时,务必重写hashCode方法。

特性:

  1. 多次调用同一个hashCode值都是一样。
  2. 如果两个对象的equals比较为true,则两个对象的hashCode值也应该相同。
  3. hashCode值应该相同。
  4. 如果两个对象equals比较为false,不强制要求两个hashCode值不相同,但是不同对象的hashCode值可以提升哈希表的性能。

toString()方法
将对象转换为字符串表示形式。
当直接输出对象时,会自动调用对象的toString()方法,及本质上输出的是toString()方法的返回值。
如果没有重写该方法,默认返回值。
类名@十六进制的hashCode值
通过重写该方法,输出对象时可以返回更加易读的信息,便于查看结果,一般用于测试。

clone()方法
用于克隆的要求
对象被克隆的要求
必须重写克隆方法,且要调用super.clone()方法。
类必须实现Cloneable接口,表示该类对象可被克隆。

浅克隆和深克隆
浅克隆(浅复制)
从Object继承的clone()方法默认浅克隆。

从Object()继承的clone()方法默认是浅克隆,只克隆对象本身,不克隆它所引用的对象,即只克隆第一层。

所有的对其他克隆的引用仍然指向原来对象。

深克隆(深复制)

  1. 把要克隆的对象所引用的其他对象都克隆一遍。
  2. 所有的对其他对象的引用都将指向被克隆的新对象。
  3. 需要自己实现对所有引用其他对象进行再次克隆。

finalize()
该方法不需要手动调用,由垃圾回收器自动调用。
垃圾回收机制:
JVM中存在有一个守护线程,叫做gc:garbage collector 垃圾回收器
gc的作用:
每个对象上,都会存在一个int类型的变量,叫做引用计数器。
每当有一个引用指向该对象,引用计数+1.
每当有一个引用不在指向该对象,引用计数-1。
当引用值为0时,JVM中的gc认为该对象为垃圾。
gc在会在合适的时机对改对象进行回收。

当对象被gc回收时,gc会自动调用finalize()方法。
可以通过执行System.gc()建议JVM进行垃圾回收。

猜你喜欢

转载自blog.csdn.net/qq_46178251/article/details/106434075