2.多数操作符都是从左到右运算的,但是赋值操作是从右到左。
3.整型操作符在计算表达式时,若一个操作元是long,那么结果也是long,否则不管操作元是byte还是short、char,运算结果都是int。
4.算术右移位操作符>>
符号位是0的左端就补零(正数),否则补一。a>>b等价于(a/2)^(b%32).
5.逻辑右移位操作符>>>
左端都是加0.
6.左移操作符<<
右端加0.
7.短路操作符
&&和||都是短路操作符,而&和|是非短路操作符。也就是说前者只需能根据操作符左边的表达式推出整个表达式的布尔值,而后者只能全部计算出来。
8.!为一元操作符,只能用于Boolean表达式。
9.使用+时,若一个操作元是string,而另一个操作元是引用类型,则调用引用对象的toString()方法获得字符串。
10.两边都是引用类型时,==只在两个引用类型引用的是同一个对象时结果为True。只有具有同种类型或有继承关系时才可以比较,否则编译出错。
11.instanceof操作符
obj instanceof ClassName/Interface,当左边为右边的类、直接或间接父类、直接或间接实现的接口时返回为TRUE。
两边的操作元必须是同种类或有继承关系的。数组类型也可以使用instanceof进行比较。
12.类型强制转换
从低位类型到高位类型会进行自动转换,而从高位类型到低位类型需要进行强制类型的转换。从double、float、long、int类型一直检测,若最终没有转换为上述任何一种数据类型,则统一转化为int。例如:
short a=1,b=1;
short c = a + b;//出错,此时a+b的结果已经转化为了int,可以将c变为int,或强制转化为short。
又如:
int x=6;
double d=7.1;
System.out.println((x>d)?99.9:9);//输出9.0,因为9已经被转化为了double。
直接数在变量所属类型的取值范围之内,就允许自动转换,但是对于变量给变量赋值则需要在适时的时候强制转换类型。
引用类型的变量之间赋值时,子类给直接或间接父类赋值,会自动进行类型转换,父类给直接或间接子类赋值,需要强行转换类型。