运算符、字符串

1、运算符

     1.1 整数除0将产生一个异常,而浮点数除0将会得到无穷大或NaN。

     1.2 自增和自减

         如: int m = 7;

                   int n = 7;

                   int a = 2 * m++; // a=14

                   int b = 2 * ++n;  // b=16

             ★ 建议表达式中不要使用这两个符号,这可能带来迷惑,并产生bug。

     1.3 &&和||按照短路方式求值

           如:x != 0 && 1 / x > x + y // 这样就不会发生除0的情况,因为x等于0的话,&&右侧的表达式将不会执行;||也是类似,当左侧为true的话,右侧表达式将不执行。

      1.4 位运算,这里说明的是它的效率很高,可以在一些要求效率的运算中如乘法,可以用位运算代替。

      1.4.1 &和|运算符号与&&和||运算非常类似,也应用于布尔值,得到的结果也是布尔值,只是不按“短路”方式计算。即两边的操作数都要计算结果。

      1.4.2 对移位运算符右侧参数需要进行模32的运算。除非左侧参数是long类型,才会进行模64.

           如:1 << 35和1 << 3 结果都是8;(long) 1 << 35 才不会溢出。

      1.4.3 >>> 将用0填充高位(逻辑移位);>> 用符号位填充高位(扩展符号位)。

     1.5 jdk5.0开始使用 import static java.lang.Math.*,则可以在类中直接使用其中的函数,而不要加前缀Math。

     1.5 数值类型之间的转换

         1.5.1 如果两个操作数中有一个是double类型的,另一个就会转换double类型。

         1.5.2 否则,如果其中一个是float类型,另一个就会转换为float类型

         1.5.3 否则,如果其中一个是lang类型,另一个就会转换为long类型

         1.5.4 否则,两个数都被转换为int类型。

     1.6 强制类型转换:java允许double转换为int,当然可能会丢失一些信息;此时应该用()给出转换的目标类型,后面跟变量名。

         1.6.1 如果目标类型的表示范围与源目标差的太远,就会截断为一个完全不同的值。               如: (byte)300 结果为44。

        1.6.2 不要将boolean与其他类型进行强制类型转换,只有极少情况下可以使用以下方式转换:b ? 1 : 0。

2、字符串

      2.1 Unicode 字符序列。如:"java\u2122"表示5个Unicode字符。

      2.2 用substring方法可以取出子串。

      2.3 java 可以用两个字符串进行拼接。

      2.4 java字符串是不可变字符串。

      2.5 用equals检测两个字符串是否相当,不区分大小写的话用equalsIgnoreCase方法。这里不能使用==,它只能判断两个字符串是否放在同一位置。

      2.6 字符数据类型是采用UTF-16编码表示unicode代码点的代码单元。大多数字符使用一个代码单元可以表示,而辅助字符需要一对代码单元表示。所以请尽量少使用char类型