天天看点

JAVA复习(九)常用类_equals_Class_String_Clone

JAVA复习(九)常用类_equals_Class_String_Clone

没意义 super()没了

JAVA复习(九)常用类_equals_Class_String_Clone
JAVA复习(九)常用类_equals_Class_String_Clone

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

JAVA复习(九)常用类_equals_Class_String_Clone
JAVA复习(九)常用类_equals_Class_String_Clone

 native

JAVA复习(九)常用类_equals_Class_String_Clone

 泛型,通配符

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

JAVA复习(九)常用类_equals_Class_String_Clone

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

JAVA复习(九)常用类_equals_Class_String_Clone
JAVA复习(九)常用类_equals_Class_String_Clone
JAVA复习(九)常用类_equals_Class_String_Clone
JAVA复习(九)常用类_equals_Class_String_Clone

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

JAVA复习(九)常用类_equals_Class_String_Clone

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

JAVA复习(九)常用类_equals_Class_String_Clone

 2.父类的也打印出来

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

 equals

我们所希望的:

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

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

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

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

所以需要重写equals;

JAVA复习(九)常用类_equals_Class_String_Clone

 Interge.compare

JAVA复习(九)常用类_equals_Class_String_Clone
JAVA复习(九)常用类_equals_Class_String_Clone
JAVA复习(九)常用类_equals_Class_String_Clone
JAVA复习(九)常用类_equals_Class_String_Clone

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

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

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

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

---

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

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

------

JAVA复习(九)常用类_equals_Class_String_Clone

 -----------

JAVA复习(九)常用类_equals_Class_String_Clone

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

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

JAVA复习(九)常用类_equals_Class_String_Clone
JAVA复习(九)常用类_equals_Class_String_Clone

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

---------

clone

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

1.重写clone方法权限;

2.对应类实现Cloneable接口

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

注意事项

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

2.

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

Object是所有类的父类,而Object中实现了clone()方法。那么为什么子类中不能调用呢。

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

JAVA复习(九)常用类_equals_Class_String_Clone
JAVA复习(九)常用类_equals_Class_String_Clone

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

创建对象的四种方式:

1.new

2.克隆

3.反射

4.序列化与反序列化

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

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

浅克隆:

JAVA复习(九)常用类_equals_Class_String_Clone

 深克隆:

JAVA复习(九)常用类_equals_Class_String_Clone
JAVA复习(九)常用类_equals_Class_String_Clone