1.Java运算符详解
1.1赋值运算符(=)
①对基本类型赋值
a=b;当b改变时,a不改变
②对对象类型赋值
a=b;
当b改变时,a也跟着改变
1.2算数运算法
①加号运算符(+)
②减号运算符(-)
③乘号运算符(*)
④除号运算符(/)
⑤求模运算符(%):从整数除法中获得余数
⑥一元加号运算符(+):a=+b
⑦一元减号运算符(-):a=-b
1.3自增和自减运算符
它们是唯一具有“副作用”的运算符(除那些涉及赋值的以外)。也就是说,它们会改变运算对象,
而不仅仅是使用自己的值。
①前缀自增运算符(++):++a
②前缀自减运算符(--):--a
③后缀自增运算符(++):a++
④后缀自减运算符(--):a--
1.4关系运算符
关系运算符生成的是一个“布尔”(Boolean)结果。它们评价的是运算对象值之间的关系。
若关系是真实的,关系表达式会生成true(真);若关系不真实,则生成false(假)。
①小于(<)
②大于(>)
③等于(==)
可以比较基本类型的内容是否相同,但不可以比较对象的内容是否相同。
要比较对象内容是否相对,要使用所有对象都适用的特殊方法equals()。
④小于或等于(<=)
⑤大于或等于(>=)
⑥不等于(!=)
1.5逻辑运算符
能生成一个布尔值(true 或false)。
操作逻辑运算符时,我们会遇到一种名为“短路”的情况。
举例:(a)||(b&&c),当a为true时,该表达式为true,而不必计算(b&&c)的值
①与(&&)
②或(||)
③非(!)
1.6按位运算符
按位运算符允许我们操作一个整数主数据类型中的单个“比特”,即二进制位。按位运算符会对两个自变量中对应的位执行布尔代数,并最终生成一个结果。
按位运算符可与等号(=)联合使用,以便合并运算及赋值:&=,|=和^=都是合法的(由于~是一元运算符,所以不可与=联合使用)。
我们将boolean(布尔)类型当作一种“单位”或“单比特”值对待,所以它多少有些独特的地方。我们可执行按位与,或和异或,但不能执行按位非(为了避免与逻辑非混淆)
①按位与运算符(&)
②按位或运算符(|)
③按位异或运算符(^)
④按位非运算符(~)
1.7移位运算符
左移可以看成乘以2,右移可以看成除以2。
①左移位运算符(<<)
能将运算符左边的运算对象向左移动运算符右侧指定的位数(在低位补0)。
②“有符号”右移位运算符(>>)
则将运算符左边的运算对象向右移动运算符右侧指定的位数。“有符号”右移位运算符使用了“符号扩展”:若值为正,则在高位插入0;若值为负,则在高位插入1。
③“无符号”右移位运算符(>>>)
它使用了“零扩展”:无论正负,都在高位插入0。这一运算符是C 或C++没有的。
1.8三元if-else运算符
这种运算符比较罕见,因为它有三个运算对象。但它确实属于运算符的一种,因为它最终也会生成一个值。
这与本章后一节要讲述的普通if-else 语句是不同的。表达式采取下述形式:
布尔表达式 ? 值0:值1
若“布尔表达式”的结果为true,就计算“值0”,而且它的结果成为最终由运算符产生的值。但若“布尔
表达式”的结果为false,计算的就是“值1”,而且它的结果成为最终由运算符产生的值。
1.9逗号运算符(,)
需要用到逗号的唯一场所就是for 循环。
举例:(for i=1;i<10;i++,j=i+5)
1.10字串运算符(+)
这个运算符在Java 里有一项特殊用途:连接不同的字串
1.11造型运算符
“造型”(Cast)的作用是“与一个模型匹配”。
举例:long l = (long)i
Java 允许我们将任何主类型“造型”为其他任何一种主类型,但布尔值(bollean)要除外,后者根本不允许进行任何造型处理。
1.12instanceof运算法
确定某对象是否属于指定的类或指定类的子类
class Animal{}
class Bird extends Animal {}
Animal a= new Animal();
Animal b=new Bird();
System.out.println( b instanceof Animal);//输出true
System.out.println( a instanceof Animal);//输出true
System.out.println( a instanceof Bird);//输出true
2.Java运算符优先级
序列号(越小代表优先级越高) | 符号 | 名称 | 结合性 | 操作目数 | 说明 |
1 | . | 成员运算符 | 从左到右 | 双目 | |
1 | ( ) | 从左到右 | |||
1 | [ ] | 索引运算符 | 从左到右 | ||
2 | + | 正号 | 从右到左 | 单目 | |
2 | - | 负号 | 从右到左 | 单目 | |
2 | ++ | 自增 | 从右到左 | 单目 | 前缀自增,后缀自增 |
2 | -- | 自减 | 从右到左 | 单目 | 前缀自减,后缀自减 |
2 | ~ | 按位非(按位取反) | 从右到左 | 单目 | |
2 | ! | 逻辑非 | 从右到左 | 单目 | |
3 | * | 乘 | 从左到右 | 双目 | |
3 | / | 除 | 从左到右 | 双目 | |
3 | % | 求模 | 从左到右 | 双目 | |
4 | + | 加 | 从左到右 | 双目 | |
4 | - | 减 | 从左到右 | 双目 | |
5 | << | 左移位 | 从左到右 | 双目 | |
5 | >> | 带符号右移位 | 从左到右 | 双目 | |
5 | >>> | 无符号右移位 | 从左到右 | 双目 | |
6 | < | 小于 | 从左到右 | 双目 | |
6 | <= | 小于或等于 | 从左到右 | 双目 | |
6 | > | 大于 | 从左到右 | 双目 | |
6 | >= | 大于或等于 | 从左到右 | 双目 | |
6 | instanceof | 确定某对象是否属于指定的类 | 从左到右 | 双目 | |
7 | == | 等于 | 从左到右 | 双目 | |
7 | != | 不等于 | 从左到右 | 双目 | |
8 | & | 按位与 | 从左到右 | 双目 | |
9 | | | 按位或 | 从左到右 | 双目 | |
10 | ^ | 按位异或 | 从左到右 | 双目 | |
11 | && | 逻辑与 | 从左到右 | 双目 | |
12 | || | 逻辑或 | 从左到右 | 双目 | |
13 | ? : | if-else运算符 | 从左到右 | 三目 | 唯一的三目运算符 |
14 | = | 赋值运算符 | 从右到左 | 双目 | |
14 | += | 混合赋值运算符 | 从右到左 | 双目 | |
14 | -+ | 混合赋值运算符 | 从右到左 | 双目 | |
14 | *= | 混合赋值运算符 | 从右到左 | 双目 | |
14 | /= | 混合赋值运算符 | 从右到左 | 双目 | |
14 | %= | 混合赋值运算符 | 从右到左 | 双目 | |
14 | &= | 混合赋值运算符 | 从右到左 | 双目 | |
14 | |= | 混合赋值运算符 | 从右到左 | 双目 | |
14 | ^= | 混合赋值运算符 | 从右到左 | 双目 | |
14 | <<= | 混合赋值运算符 | 从右到左 | 双目 | |
14 | >>= | 混合赋值运算符 | 从右到左 | 双目 | |
14 | >>>= | 混合赋值运算符 | 从右到左 | 双目 |