Java 运算符
- 优先级;运算符的优先级决定存在多个运算符时一个表达式的计算顺序,最简单的规则就是乘法和除法在加减法之前完成,为避免因优先级问题导致运算顺序的错误,建议用括号明确规定计算顺序~
备注:
Ulcer(溃疡) Unary:一元 + - + + - [[ 其余的 ]]
Addicts(患者) Arithmetic(shift);算术(和移位) * / % + - << >> Really(特别) Relational:关系 > < >= <= == !=
Like(喜欢) Logical(bitwise):逻辑(和按位) && || & | ^
C Conditional(ternary):条件(三元) A>B ? X:Y
A Lot Assignment:赋值 =(以及复合赋值,如*=)
- 赋值 = ;取右边的值,把它复制到左边;
- 算数运算符 包括加号(+)、减号(-)、除号(/)、乘号(*)、模数(%);
(1) 备注:整数除法会直接砍掉小数,不是进位;
(2) 简写形式,同时进行赋值操作,等号前的一个运算符标记,例如:x+=4;
- 自动递增和递减 ++ --;
(1) 前缀形式表示运算符位于变量或者表达式的前面;后缀形式表示运算符位于变量或者表达式的后面;
(2) 前缀形式会前执行运算,在生成值,例如 ++A或--A;后缀形式会先生成值,在执行运算,例如A++或A--
- 关系运算符 小于(<)、大于(>)、小于等于(<=)、大于等于(>=)、等于(==)、不等于(!=);
(1) 关于等于(==)和不等于(!=),基本类型比较的值,对象比较的是内存地址;
(2) 对象的比较使用equals()方法;
- 逻辑运算符 AND(&&)、OR(||)以及NOT(!)
(1)短路问题; &&只要当前项为假,它就不往后判断了,直接认为表达式为假;||只要当前项为真,它也不往后判断了,直接认为表达式为真。
- 按位运算符
- 移位运算符 左移位运算符(<<)、有符合右移位运算符(>>)、无符号右移运算符(>>>);
(1) << 将运算符左边的运算对象向左移动运算符右侧指定的位数(在低位补0);
(2) >> 将运算符左边的运算对象向右移动运算符右侧指定的位数,若值为正,则高位插入0;若值为负,则高位插入1。
(3) >>> 无论正负,都在高位插入0。
(4)对char,byte或者short的移位处理,在移位之前,先自动转换成一个int。只有右侧的 5 个低位才会用到。这样可防止我们在一个 int 数里移动不切实际的位数。
(5)对一个 long 值进行处理,最后 得到的结果也是long。此时只会用到右侧的6个低位,防止移动超过long值里现成的位数。
(6)在进行“无 符号”右移位时,也可能遇到一个问题。若对 byte 或 short 值进行右移位运算,得到的可能不是正确的结果 (Java 1.0 和Java 1.1 特别突出)。它们会自动转换成int 类型,并进行右移位。但“零扩展”不会发 生,所以在那些情况下会得到-1 的结果。
- 三元if-else 运算符 布尔表达式?值0:值1,若布尔表达式的结果为true,就计算“值0”,否则计算“值1”;
- 逗号运算符 唯一场所死for循环中使用;
- 字符串运算符+ 连接不用的字符串;
备注:连接的结果值会重新生成一个String 对象~
网友评论