1、java中几乎所有的操作符都只能操作“基本类型”,例外的操作符是“=”、“==”和“!=”,这些操作符能操作所有对象,除此之外,String类型支持“+”和“+=”。

2、逻辑操作符

              &&、||、!,逻辑运算符的短路问题:一旦能够明确无误的确定整个表达式的值,就不在计算表达式余下的部分了。

3、按位操作符

             按位操作符用来操作整数基本数据类型中的单个byte,会对两个参数中对应的位执行布尔操作,并最终生成一个结果。

4、移位操作符

            移位操作符操作的运算对象也是二进制的"位"。

           左移位操作符("<<"):操作数左移,低位补0。

           有符号右移位操作符(>>):操作数右移,若符号为正,则在高位插入0;若符号位为付,则在高位插入1。

           无符号右移操作符(>>>):操作数右移,无论符号正负,都在高位插入0。

            如果对char、byte、short类型的数值进行移位处理,那么在移位进行之前,他们会被转化为int,得到的结果也是int类型,只有数值右端的低5位才有用。(防止移位超过int的表示范围)

           移位可与等号组合使用(<<=或者>>=或者>>>=),但是对于short或者byte值进行无符号右移(>>>=),得到的可能不是想要的结果。他们先会被转换成int类型,在进行右移操作,然后被截断,赋值给原来的类型。

5、三元操作符

           在进行三元操作符奇偶判断的时候尽量使用偶判断而不要使用奇判断,不然会产生意想不到的结果(看源代码了解java三木操作的原理)。

6、字符串操作+和+=

           String x += y 在效率上比String x = x + y效率高点。

7、类型转换操作符

           扩展转换:不必显式的进行类型转化,因为新类型肯定能够容纳原来类型的信息。

          窄转换:(将能容纳更多信息的类型转换成无法容纳那么多信息的类型)有可能面临数据丢失的危险。执行窄转换时,必须注意结尾和舍入的问题。

8、总结:对于基本数据类型执行算术运算或按位运算,只要类型比int小,那么在运算之前,这些值会自动转换成int,最终生成的结果就是int类型。通常表达式中出现最大数据类型决定表达式最终结果的数据类型。