基本类型转换
自动类型转换:容量小的类型自动转换为容量大的数据类型
byte, short, char -> int-> long-> float-> double
赋值表达式等号两侧的转换的规则:右侧表达式要转换到和左边的类型一样
short s = 1 //可以
s=s+1; //错
字面量 1 是 int 类型,在计算时s会自动转换为int,与1相加后,得到
int型的2,要向左侧的short类型的s1看齐,即需要通过强制类型转换
s+=1;//对
+=,++运算符可以执行隐式类型转换,其实执行的是s1 = (short) (s1 + 1);
其中会有一个强制转换的过程
隐式类型转换:当运算符在运算时,如果两边数据不统一,CPU就无法计算,这时编译器会自动将运算符两边的数据做一个数据类型转换,转成一样的数据类型再计算
访问权限
不加访问修饰符,表示包级可见
protected修饰成员,表示在继承体系中,该成员对于子类可见
privated仅在类内部可见
里氏替换原则
里氏代换原则(Liskov Substitution Principle, LSP):所有引用基类(父类)的地方必须能透明地使用其子类的对象。
理解:接受的参数(类型)范围比父类大,返回的类型范围比父类小。可以理解为子类比父类强,父亲能干的事情儿子一定可以,反过来不一定成立。
判断相等
x instanceof A :
检验x 是否为类A 的对象,返回值为boolean 型。
要求x所属的类与类A必须是子类和父类的关系,否则编译错误。
如果x属于类A的子类B,x instanceof A值也为true
==
- 基本类型比较值:比较两个变量保存的数据是否相等。(不一定类型要相同)
- 引用类型比较引用(是否指向同一个对象):只有指向同一个对象时,== 才返回true。
- 用“==”进行比较时,符号两边的 数据类型必须兼容(可自动转换的基本
数据类型除外),否则编译出错
obj1.equals(obj2)
Object类中equals()的定义:
public boolean equals(Object obj) {
return (this == obj);
}
说明:Object类中定义的equals()和==的作用是相同的:比较两个对象的地址值是否相同.
即两个引用是否指向同一个对象实体
- 只能比较引用类型 ,
- 所有类都继承了Object,也就获得了equals() 方法 ,当自定义使用equals() 时,可以重写,用于比较两个对象的 “ 内容 ” 是否都相等。
- 特例用 :当用equals() 方法进行比较时,对类File 、String 、Date 及包装类(Wrapper Class) 来说 , 是比较类型及内容而不考虑引用的是否是同一个对象 ;
原因:在这些类中重写了Object 类的equals() 方法 。