java的运算符(也称为操作符)的写法和功能与C语言基本一致,本文章介绍java的运算符
java的运算符包括:算术运算符、关系运算符、逻辑运算符、位运算符和其他运算符
1.算术运算符
算术运算符包括一元运算符、二元运算符、算术赋值运算符
1.1一元运算符
一元运算符有:-、++、--
一元运算符的名称作用和例子在表格中显示
运算符 | 名称 | 功能 | 例子 |
- | 取反符号 | 取反运算 | a=-a |
++ | 自加1 | 先用后加,先加后用 | a++,++a |
-- | 自减1 | 先用后减,先减后用 | a--,--a |
取反符号是把变量等的符号位取反。
先用后加意思是我最先用它,最后再加1。先加后用意思是我最先加1,最后再用它。
先用后减,先减后用和上一句话同理。先用后减意思是我最先用它,最后再减1。先减后用意思是我最先减1,最后再用它。
因为++和--的运算符优先级很高仅次于引用号(.)和中小括号,所以不用担心因为优先级的原因而等不到想要的结果。文章最后面会介绍运算符的优先级顺序,本作者会把列表列出来。
1.2二元运算符
二元运算符:+、-、*、/、%
二元运算符的名称作用和例子在表格中显示
运算符 | 名称 | 功能 | 例子 |
+ | 加 | 用于求a+b的和,还可以用于String类型,进行字符串的连接操作 | a=a+b |
- | 减 | 用于求a-b的差 | a=a-b |
* | 乘 | 用于求a*b的积 | a=a*b |
/ | 除 | 用于求a/b的商 | a=a/b |
% | 求余 | 用于求a/b的余数 | a=a%b |
上面的加减乘除相当于数学的四则运算,'+'有点儿特殊,它可以用于字符串之间的连接。这种运算符在大多数编程中都可以用于字符串的连接,比如像C语言比较特殊。C语言是要先引用<string.h>头文件,再使用strcat函数把两者的字符串连接起来。而且strcpy函数只能一次性连接两个字符串。C语言的 '+' 运算符只能用于求和,不能用于字符串连接。
求余运算符是求a/b的余数
例子:10%3 <==> 10/3 ····· 余1
求余的值就是1.
1.3算术赋值运算符
算术运算符:+=、-=、*=、/=、%=
算术运算符的名称作用和例子在表格中显示
运算符 | 名称 | 功能 | 例子 |
+= | 加赋值 | 相当于a=a+b | a+=b |
-= | 减赋值 | 相当于a=a-b | a-=b |
*= | 乘赋值 | 相当于a=a*b | a*=b |
/= | 除赋值 | 相当于a=a/b | a/=b |
%= | 取余赋值 | 相当于a=a%b | a%=b |
算术运算符只是一种简写,一般用于变量自身的变化。
2.关系运算符
关系运算符:==、!=、>、<、>=、<=、
关系运算符的名称作用和例子在表格中显示
运算符 | 名称 | 功能 | 例子 |
== | 等于 | a等于b时返回true,否则返回false。可以用于基本数据类型和引用数据类型 | a==b |
!= | 不等于 | a不等于b时返回true,否则返回false。只能用于基本数据类型 | a!=b |
> | 大于 | a大于时返回true,否则返回false。只能用于基本数据类型 | a>b |
< | 小于 | a小于b时返回true,否则返回false。只能用于基本数据类型 | a<b |
>= | 大于等于 | a大于等于b时返回true,否则返回false。只能用于基本数据类型 | a>=b |
<= | 小于等于 | a小于等于b时返回true,否则返回false。只能用于基本数据类型 | a<=b |
3.逻辑运算符
逻辑运算符:!、&、|、&&、||
逻辑运算符的名称作用和例子在表格中显示
运算符 | 名称 | 功能 | 例子 |
! | 逻辑非 | a为true时,为false;a为false时,为true | !a |
& | 逻辑与 | ab都为true,结果true,否则false | a&b |
| | 逻辑或 | ab都为false,结果false,否则true | a|b |
&& | 短路与 | ab都为true,结果true,否则都为false.&&和&的区别:如果a为false,不计算b | a&&b |
|| | 短路或 | ab都为false,结果false,否则都为true.||和|的区别:如果a为true,不计算b | a||b |
短路与(&&)和短路或(||)能够采用最优化的计算方式,是因为短路与(&&)如果a为false,不计算b和短路或(||)如果a为true,不计算b。减少一些没有必要的计算,从而更快的效率。在实际生产中尽量使用一些像短路与(&&)和短路或(||)的运算符等方法,提高效率,减少一些多余的成本。
4.位运算符
位运算符:~、&、|、^、>>、<<、>>>、&=、|=、^=、<<=、>>=、>>>=
位运算符的名称作用和例子在表格中显示
运算符 | 名称 | 功能 | 例子 |
~ | 位反 | 将x的值按为取反 | ~x |
& | 位与 | x与y进行位与运算 | x&y |
| | 位或 | x与y进行位或运算 | x|y |
^ | 位异或 | x与y进行位异或运算 | x^y |
>> | 有符号右移 | x右移y位,高位用符号位补位 | x>>y |
<< | 左移 | x左移y位,低位用0补位 | x<<y |
>>> | 无符号右移 | x右移y位,高位用0补位 | x>>>y |
&= | 位与等于 | 相当于x=x&y | x&=y |
|= | 位或等于 | 相当于x=x|y | x|=y |
^= | 位异或等于 | 相当于x=x^y | x^=y |
<<= | 左移等于 | 相当于x=x<<y | x<<=y |
>>= | 有符号右移等于 | 相当于x=x>>y | x>>=y |
>>>= | 无符号右移等于 | 相当于x=x>>>=y | x>>>=y |
注意:无符号右移(>>>)运算符只能用在int类型和long类型,如果用于byte和short这两个类型,则数据位移前,先转换为int类型再进行位移计算。
5.其他运算符
其他运算符的名称作用和例子在表格中显示
运算符 | 名称 | 功能 | 例子 |
? : | 三元运算符(也称三目操作符) | 三元运算符的格式如下:表达式1?表达式2:表达式3。如果满足表达式1运行表达式2否则运行表达式3 | max=(x>y)?x:y |
() | 小括号 | 起到改变表达式运算顺序的作用,它的优先级最高 | |
[] | 中括号 | 是数组的下标 | arr[10] |
引用号(.) | 引用号 | 对象调用实例变量或实例方法的操作符,也是类调用静态变量或静态方法的操作符 | |
= | 赋值 | 给x赋值 | x=10; |
instanceof | 判断某个对象是否属于某个类 | ||
new | 对象内存分配运算符 | ||
-> | 箭头 | java8新增加的,用于声明Lambda表达式 | |
:: | 双冒号 | java8新增加的,用于Lanmbda表达式中方法的引用 |
6、运算符优先级
运算符的优先级如下:
优先级 | 运算符 |
1 | 引用号(.)、中括号 、小括号 |
2 | ++、--、-(取反)、~(位反)、!(逻辑非)、类型转换小括号 |
3 | *、/、% |
4 | +、- |
5 | <<、>>>、>> |
6 | <、>、<=、>=、instanceof |
7 | ==、!= |
8 | &(逻辑与和位与) |
9 | ^(位异或) |
10 | |(逻辑或、位或) |
11 | && |
12 | || |
13 | ?: |
14 | -> |
15 | =、*=、/=、%=、+=、-=、<<=、>>=、>>>=、&=、^=、|= |
运算符优先级的总结:从高到底是算术运算符>位运算符>关系运算符>逻辑运算符>赋值运算符