标签:内存地址 java 对象 Object equals 设计模式 方法 比较
Object
Object是java中提供的一个根类(祖宗)
- 所有类都直接或者间接的继承了Object
- 如果一个类没有显示继承一个父类的话,那么该类默认继承Object
- 既然Object是所有类的祖类,也就意味着 Object中的方法是所有类都有的功能
- Object xxx = new xxxx() ; 是可以发生多态的
- 因为多态的原因,如果一个方法需要传递的数据,我们不能确定数据的类型的时候,可以写Object
Equals
-
关于Object中的equals方法
public boolean equals(Object obj){
return (this == obj);
} -
== : 两边如果是基本类型,则比较值的大小,但是两边如果是引用类型,则比较内存地址
-
而Object中的equals方法,默认比较 内存地址,因为 就是 ==
-
设计目的 : 比较两个对象是否相等
-
但是 它没有实现该功能,因为不知道怎么实现,不知道你要比较什么属性,所以没法实现
-
需要根据自己的需求进行重写,因为使用者一定知道怎么判断相等
-
两个对象可以是任何东西,但是我们肯定要拿两个对象的有意义属性进行比较
-
而不是比较内存地址,所以 这个时候要将两个对象对应的equals方法进行重写,以满足我们的需求
-
但是不同类的对象,没有可比性
-
比较字符串是否相等,应该用 equals 因为 == 比较内存地址
-
并且 String类中 已经重写了equals方法,比较的是值,而不是地址
-
任何的引用类型比较,都必须转换为基本类型比较,除非就是想知道他们内存地址是否一致
-
因为 == , != 这些 只能比较基本数据类型,当两个对象比较的时候,会比较内存地址
-
而我们比较的时候应该拿某一个相同的属性的值去比较,所以这样最终还是会变成基本数据类型
-
所以说,面向对象就是一种基本数据封装的形式,所以我们比较的时候最终都要转换为基本类型比较
toString
-
设计目的 : 返回该对象的字符串表示形式,可以通过这个方法,把每个对象的数据展示出来,让外界知道
-
输出一个引用类型的时候,会自动调用该对象的toString方法
hashCode
-
hashCode设计目的 : 是为了给每个对象生成一个唯一的标识符
-
同一个对象生成多次hash值,值一定是一样的
-
但是 不同对象,生成的值,也有可能相同,这样又叫哈希冲突
-
既然有哈希冲突的情况,所以 hash就不能保证数据的唯一性 , 怎么办?
-
1 先比较哈希,如果哈希不同,对象则不同
-
2 如果哈希值相同,再比较对象是否相同(equals)
-
hash算法 : 是一种安全的加密算法,把不定长的值,改为定长的值,并且不能保证其唯一性
finalize
-
垃圾被回收之前 自动调用该方法。
-
1 finalize是每个对都有的方法
-
2 不需要程序员去调用,由系统自动调用
-
3 java中如果每个更多引用指向这个对象,那么该对象被视为垃圾数据,等待被回收,被回收之前,自动调用finalize方法
-
4 finalize方法 没有垃圾回收功能,只是用于被回收之前做的一些事而已,回收是JVM去做的,所以程序员就算手动调用这个方法,也只是一个普通的成员方法调用而已,和对象回收没有任何关系
-
5 一般用于做一些对象回收前的数据销毁操作
标签:内存地址,java,对象,Object,equals,设计模式,方法,比较 来源: https://blog.csdn.net/qq_45020911/article/details/112794654
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。