目录
显示
状态影响行为。
行为影响状态。
类描述了一个对象 知道什么,以及能做什么。
调用者传递参数、方法接受参数。
💡传递的都是二进制的值!!值!!值!!!
💡传递的都是副本!副本!副本!
将对象的实例变量设置为private 。
将对象的方法设置为public。
为什么要封装?
当着500人演讲,一顿操作,最后发现自己没穿衣服。
实例变量和局部变量
实例变量有默认值,局部变量没有默认值
实参与形参
形式参数rootNode:deleteMinNode(BinarySearchTreeNode rootNode)
实际参数n3:deleteMinNode(n3);
当对象具有setvalue
时,就可以通过形式参数对对象的值进行修改了,因为指针指向的是对象的setValue方法。
深入分析🧐
为什么实例变量有默认值,局部变量没有默认值?
答:从JVM的角度来看,实例变量被属于对象的一部分放在堆中,在classLoader 链接中的准备阶段,会将堆中的类变量附默认值。
💡而对象的方法不在堆中,堆中的只是方法的元数据,引用到方法区中的Class对象(元数据对象),而是在
方法区
或者元数据空间
(jdk8+)中,只有在程序运行的时候才会通过对象对应的class信息到方法区中加载到栈中的栈帧里,所以必须要程序员提前手动赋值。== 与equals
- 要比较两个基本类型,则使用== 操作符。
- 要看两个引用是否相同(这表示他们的引用的是堆heap上的同一个对象)
- 使用equals 是两个不同 的对象是否相等。eg:两个String str1 ="123" 和String str2="123”是否相等
深入分析🧐
如果equals 的调用者没有重新equals 方法, 默认使用的是Object 中的equals,还是使用== 判断引用是否相同。
public boolean equals(Object obj) { return (this == obj); }
如果equals 的调用者重写了equals方法, 使用的就是重写之后 的equals。
重写equals 必须满足一下几种条件:
- 自反性✔:对于任何非null引用x,x.equals(x)应该返回true。
- 对称性✔:对于任何非null引用x和y,如果x.equals(y)返回true,则y.equals(x)也应该返回true。
- 传递性✔:对于任何非null引用x、y和z,如果x.equals(y)返回true,并且y.equals(z)也返回true,则x.equals(z)也应该返回true。
- 一致性✔:对于任何非null引用x和y,只要equals方法中所用到的信息没有被修改,多次调用x.equals(y)应该总是返回相同的结果。
- 非空性✔:对于任何非null引用x,x.equals(null)应该返回false。
需要重写hashCode,hashCode方法的实现保持一致,因为对象一致,对象的hashCode就要保持一致。