本周只有一节课,内容较少。对于不可变类型的相等比较,需要重写equals和hashCode方法,实现观察等价性。对于可变类型,不建议重写以上两方法,按照默认比较方式(比较内存地址)即可。
可变类型的相等关系
1.Object类的equals方法检查的是行为等价性,即两个变量指向同一个对象时才相等。如StringBuilder类的equals方法。
2.所有不可变类都要重写equals方法,实现观察等价性。
对于可变类,直接继承Object类的hashCode和equals方法即可。
如果一定要判断两个可变对象看起来是否一致,最好定义一个新的方法。
3.clone方法创建对象的复制。
浅拷贝只复制引用,深拷贝创建新对象。
满足如下性质
自动封装和相等
1.基本数据类型存放在栈中,对象数据类型 存放在堆中。
2.
3.通过调用valueOf创建整形对象,如果范围是-128~127,则相同值只创建一个对象,拥有行为等价性。执行如下操作返回true
4.执行左侧的结果为false(因为明确声明要创建两个对象),右侧结果为true(同3)。