JAVA复习(九)常用类_equals_Class_String_Clone

本文探讨了Java中equals和hashCode方法的重写原则,强调了当两个对象equals相等时,它们的hashCode也应该相等以减少哈希冲突。同时,解释了克隆、垃圾回收和对象创建的不同方式,包括浅克隆和深克隆的差异。此外,还提到了类加载的过程以及如何避免内存中的对象重复。
摘要由CSDN通过智能技术生成

没意义 super()没了

 

 //实现接口重写的方法的返回值的类,(这个重写的方法直接调用了另一个(类/对象)的一个已实现方法),方法引用;

 

 

 native

 泛型,通配符

加载--(验证)连接--初始化

 类加载只加载一次;所以同类的类对象都相同

 

 

 

hashCode()称为哈希方法,会返回该对象地址值的十进制表示(重写之前)

String concat(+):加号拼接字符串

 

 2.父类的也打印出来

---------------------------------------------

 equals

我们所希望的:

1.如果两个对象不是一个类型的对象,直接不相等;

2.如果两个对象是相同类型的对象,(一位置方法/行为一定一致);

        a.如果成员变量的取值(属性)是一致的,那么对象相同

        b.如果成员变量的取值(属性)不相同,那么对象就不相等;

所以需要重写equals;

 Interge.compare

 

 

 

 就是说:我们希望hashCode不应该仅仅根据地址值来进行生成.因为equals相等的对象,我们希望他们的hashCode也应该一样.

(equals重写使ture的条件更宽松了,而ture的哈希也ture了,则其实冲突概率提升了)

(根据成员变量的取值得到哈希值)

然而同样可能出现两个不equals的值而hashCode相等,哈希冲突是无法避免的;

---

不重写的话,只要地址相等哈希就相等,地址不能哈希就不能(地址)

重写后:地址相等哈希相等,地址不等但是属性相等(equals)哈希也相等(算属性)

------

 -----------

 因为你本来打印地址值的时候没有重写哈希值,所以哈希值是看地址的,

而重写之后p1equalsp2了,看算法的哈希值(属性),就二者就相等了;

 

意思就是 垃圾回收系统是随机的,通知了GC之后,有时候调用finalize回收,有时候等待;

---------

clone

(就是克隆一个对象,其中的属性方法都一致)

1.重写clone方法权限;

2.对应类实现Cloneable接口

3.(选做)返回值类型(从obj改为自己)

注意事项

1.Cloneable是一个标记接口()

2.

 clone()方法是Object里面的protected方法,只允许在同包和子类内部调用。

Object是所有类的父类,而Object中实现了clone()方法。那么为什么子类中不能调用呢。
这个原因就在于clone()是一个protect方法。因为protect方法只能在当前包或者子类中调用(super点)。而不能通过子类的实例调用。如果能通过子类的实例来调用的话,那和puplic还有什么区别呢。

clone方法创建对象不依赖于构造器(利用本地方法),它是一种全新的和new对象平行的创建对象方式;

创建对象的四种方式:

1.new

2.克隆

3.反射

4.序列化与反序列化

4.如果被复制类里有一个引用类型的成员对象:

克隆后的引用地址仍然指向原来的成员变量的对象;

浅克隆:

 深克隆:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值