运算符
Java中运算符可以分为算术、赋值、比较、逻辑、位和类型相关运算符等多种,本篇一一做出总结。
算术运算符
算术?无非就是加减乘除嘛,除此之外还有呢。
-
+
:除了可做基本数据类型的加法,还可以作为字符串的拼接符。 -
/
:除法也相对特殊,用作整数计算,且除数不能是0,结果也为整,就算取不到整数也得强行截断。如果至少有一个浮点数,那么就是自然除法,而且还会有无穷和非数的情况出现。 -
%
:求余运算,涉及到除法运算需要注意除法运算相关事项。 -
++
:自加,只能操作一个操作数或者单个数值类型的变量(变量!!!)。++m
和m++
的区别:-
++m是先把m加上1,然后再把结果放入表达式中进行计算。
-
m++实先把m的值放到表达式中计算,然后给m值加1。
int a =5; int b = a++;//b=5,之后a++,变为6 int c = ++a;//c=6+1=7 System.out.println(a+","+b+","+c);
-
-
--
:同理++
。
Java中可以借助
java.lang.Math
类中的方法完成相对麻烦的数学运算,如乘方、开方等运算。import static java.lang.Math.*;
赋值运算符
为变量指定变量值。就是把什么东西装到容器里面。
-
Java与其他语言类似,也是用
=
进行赋值操作。double pi = 3.14;
-
赋值也可以将一个变量的值赋给另外一个变量。
int a = 5; int b = a;
-
可以一次为多个变量赋值,但可读性较差。
扩展赋值运算符
隐含强制转换类型,更具健壮性。
tips:a+=5;与a=a+5;有些时候代表的并不相同。
byte a = 4; a = a + 5;//报错,因为左边为byte,右边自动上升为int。 byte b = 4; b += 5;//正常,因为把b设置为(byte)(b+5)
比较运算符
就是比大小嘛,出来是个布尔值。
==
:- 如果比较的是两个数值类型的数,只要值相等,就返回true,哪怕类型不相同。
5.0==5;
- 如果都是引用类型的话,必须指向同一对象才会返回true。
- boolean类型也可以比较。
true == false;
,返回false。
- 如果比较的是两个数值类型的数,只要值相等,就返回true,哪怕类型不相同。
逻辑运算符
用来操作两个布尔型的变量或者常量。
&&
和&
:都表示着与逻辑,全真为真,有零出零。前者&&
代表“短路与”,即如果判断的第一个操作数或者表达式为false,就不再对后面的操作数求值,而是直接返回false。||
和|
:都表示着或逻辑,有真出真,全零出零。前者代表“短路或”,同理于“短路与”。第一个为true,直接true,根本不管后面的相当于短路掉了。
位运算符
处理整型类型时,直接对组成整型数值的各个位完成操作。
&
是按位与,|
是按位或,~
是按位非。^
是按位异或,两位相同为0,不同为1。<<
是左移,>>
是右移。>>>
是无符号右移,没有<<<
这个符号。>>>
会用0填充高位,前者则是用符号位填充。- 对于比int类型小的操作数,总是先转换为int再移位。
- 对于int类型a>>b,如果b>32,则移位的位数为b%32,long类型同理。
- 移位时,如果二进制码没有发生有效数字丢失的情况,左移n位等价于乘上2的n次方,右移则是除以2的n次方。
三目运算符
直接上例子!
String a;
a = 2>1 ? "2比1大":"2比1小";
System.out.println(a);
表达式 ? 成功语句 :失败语句;
是基本定义式子。- 表达式为true,执行成功语句,false则执行失败语句。
- 三目运算符不支持多个语句,但可以嵌套使用。
运算符优先级和结合性
运算符优先级自上而下逐级递减。
运算符说明 | Java运算符 | 结合顺序(<--表示从右到左) |
---|---|---|
分隔符 | . [] () {} , ; | --> |
单目运算符 | ++ -- ~ ! | <-- |
强制类型转换运算符 | (type) | --> |
乘,除,求余 | * / % | --> |
加法,减法 | + - | --> |
移位运算符 | << >> >>> | --> |
关系运算符 | < <= >= > instanceof | --> |
等价运算符 | == != | --> |
按位与 | & | --> |
按位异或 | ^ | --> |
按位或 | | | --> |
条件与 | && | --> |
条件或 | || | --> |
三目运算符 | ?: | <-- |
赋值 | = += -=等 | <-- |