Java学习总结之第三章 操作符
1、不管操作元是byte、short或char类型,运算结果都是int型。
2、操作符”>>”进行算术右移位运算,也称带符号右移位运算。而”>>>”是逻辑右移位操作符,也称不带符号右移位操作符,在移位的过程中,二进制数的开头增加的位都是0。
3、浮点运算不支持位运算。
4、”&&”和”||”是短路操作符,而”&”和”|”是非短路操作符。
5、如果”+”操作符中有一个操作元为String类型,则另一个操作元可以是任意类型(包括基本类型和引用类型),不过该操作元将被转换成字符串。当一个操作元为String类型时,如果另一个操作元为引用类型,就调用所引用对象的toString()方法来获得字符串。
6、除了”+”能用于字符串的连接以外,其他操作符都不支持String类型的操作元。
7、操作符”==”与对象的equal()方法
l ”==”操作符作用在引用类型的变量时,比较的是两个引用变量本身的值,而不是它们所引用对象的值。并用”==”用于比较引用类型变量时,两边的变量被显式声明的类型必须是同种类型或有继承关系。
l Object类的equal()方法的比较规则为:当参数obj引用的对象与当前对象为同一个对象时,就返回true,否则返回false。即equal()方法比较的是引用变量所引用的对象的值。
l 另外注意,在JDK中有一些类覆盖了Object类的equal()方法,它们的比较规则为:如果两个对象的类型一致,并且内容一致,则返回true。这些类包括:java.io.File、java.util.Date、java.lang.String、包装类(如java.lang.Integer和java.lang.Double类等)。
8、instanceof操作符
instanceof操作符用于判断一个引用类型所引用的对象是否是一个类的实例。instanceof操作符左边的操作元是一个引用类型,右边的操作元是一个类名或接口名。形式如下:
obj instanceof ClassName
或
obj instanceof InterfaceName
注:instanceof左边操作元被显式声明的类型与右边操作元必须是同种类或有继承关系。且在运行时
将根据左边操作元实际引用的对象来判断。另外,数组类型也可用instancdof进行比较。
9、变量的赋值和类型转换
1) 同种类型的变量之间可以直接赋值,不需要进行类型转换一个直接数可以直接赋给与它同类型的变量。
2) 在不同类型的变量之间赋值时,或者将一个直接数赋给与它不同类型的变量时,需要进行类型转换。分为自动类型转换和强制类型转换两种。自动转换总是从低位类型到高位类型,而把高位类型赋值给低位类型,就必须进行强制类型转换。
自动类型转换规则如下:
l (byte、char、short、int、long或float) op double à double
l (byte、char、short、int或long) op float à float
l (byte、char、short或int) op long à long
l (byte、char、或short) op int à int
l (byte、char、或short) op (byte、char、或short) à int
l 注意:byte、short和char类型的数据在如”x++”这样的一元运算中不自动转换类型。
3) 从低位类型到高位类型会进行自动转换,而从高位类型到低位类型需要进行强制类型的转换。另外,boolean类型不能与其他的基本类型进行类型转换。
4) 在引用类型的变量之间赋值时,子类给直接或间接父类赋值,会自动进行类型转换。父类给直接卡间接子类赋值,需要进行强制类型转换。另外要特别注意,对于引用类型的变量,Java编译器只根据变量被显式声明的类型去编译,但是在运行时,Java虚拟机将根据引用变量实际引用的对象进行类型转换。