Java 运算符
计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量。Java运算符按功能可分为:算数运算符、关系运算符、逻辑运算符、位运算符、赋值运算符和条件运算符。
算数运算符
算术运算符用在数学表达式中,它们的作用和在数学中的作用一样。下表列出了所有的算术运算符。
表格中的实例假设整数变量A的值为10,变量B的值为20:
操作符 | 描述 | 例子 |
+ | 加法--相加运算符两侧的值 | A+B等于30 |
- | 减法--左操作数减去右操作数 | A-B等于-10 |
* | 乘法--相乘操作符两侧的值 | A*B等于200 |
/ | 除法--左操作数除以右操作数 | B/A等于2 |
% | 取余--左操作数除以右操作数的余数 | B%A等于0 |
++ | 自增--操作数的值加1 | B++或者++B等于21(注:B++和++B在参与运算时有区别,具体见下文) |
-- | 自减--操作数的值减1 | B--或者--B等于19(注:B--和--B在参与运算时有区别,具体见下文) |
注意:
1、加法(+):
加法运算符不但用于计算两个数值型数据的和,还可用于字符串对象的连接。当+运算符的两个操作数一个是字符串而另一个是其他数据类型,系统会自动将另一个操作数转换成字符串,然后再进行连接
2、除法(/)
除法运算符,除法运算符有些特殊,如果除法运算符的两个操作数都是整数类型,则计算结果也是整数,就是将自然除法的结果截断取整。如果除法运算符的两个操作数都是整数,则除数不可以是0,否则将引起除零异常。
3、取余(%)
求余运算的结果不一定总是整数,它的计算结果是使用第一个操作数除以第二个操作数,得到一个整数的结果后剩下的值就是余数 。如果取余运算的两个操作数都是整数类型,则计算结果也是整数类型,除数不可以是0,否则将会引发除以0异常;如果除法的两个操作数有一个或两个是浮点型,则结果也是浮点型,此时除数允许是0,或者是0.0,得到的结果是非数:NaN.0或0.0对0以外的任何数求余都将得到0或0.0;只有被除数是负数时,余数才是负的。
4、自加(++)与自减(--)
1.自加和自减是一元运算符,只能操作是个操作数
2.自加和自减参与运算
放在操作数的前面,先自增或者自减,然后再参与运算
放在操作数的后面,先参与运算,再自增或者自减
下面以++为例,--同理
关系运算符
关系运算符用来判断两个变量或者常量的大小,关系运算符的结果是一个boolean值( true或者false)。
>、<、>=、<=运算符优先级别高于==、!=
>、<、>=、<=运算符只支持数值类型的数据比较
下列为Java支持的关系运算符
假设表格中的实例整数变量A的值为10,变量B的值为20;
运算符 | 描述 | 例子 |
== | 检查如果两个操作数的值是否相等,如果相等则条件为真。 | (A==B)为假 |
!= | 检查如果两个操作数的值是否相等,如果值不相等则条件为真。 | (A!=B)为真 |
> | 检查左操作数的值是否大于右操作数的值,如果是那么条件为真。 | (A>B)为假 |
< | 检查左操作数的值是否小于右操作数的值,如果是那么条件为真。 | (A<B)为真 |
>= | 检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。 | (A>=B)为假 |
<= | 检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。 | (A<=B)为真 |
逻辑运算符
逻辑运算符用于操作两个boolean类型的变量或者常量,逻辑运算符的运算对象只能是布尔型数据,并且运算结果也是布尔型数据。
开发中主要用到的逻辑运算符包括如下3种:逻辑非(!)、短路与(&&)、短路或(||)。
如果第一个操作数已经能确定表达式的值,第二个操作数就不必计算了;优先级别:!>&&>||
下表列出了逻辑运算符的基本运算,假设布尔变量A为真,变量B为假
操作符 | 描述 | 例子 |
&& | 称为逻辑与运算符(短路与),当且仅当两个操作符都为真,条件才为真。 | (A&&B)为假 |
|| | 称为逻辑或操作符(短路或),如果任何两个操作数任何一个为真,条件为真。 | (A||B)为真 |
! | 称为逻辑非运算符,用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false | !(A&&B)为真 |
位运算符
Java定义了位运算符,应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等类型。
位运算符用来对二进制位进行操作,包括按位取反(~)、按位与(&)、按位或(|)、异或(^)、右移(>>)、左移(<<)和无符号右移(>>>)。
位运算符作用在所有的位上,并且按位运算。假设a = 60,b = 13;它们的二进制格式表示将如下:
A = 0011 1100 B = 0000 1101 ----------------- A&B = 0000 1100 A | B = 0011 1101 A ^ B = 0011 0001 ~A= 1100 0011
下表列出了位运算符的基本运算,假设整数变量 A 的值为 60 和变量 B 的值为 13:
操作符 | 描述 | 例子 |
& | 如果相对应位都是1,则结果为1,否则为0. | (A&B),得到12,即0000 1100 |
| | 如果相对应位都是0,则结果为0,否则为1。 | (A | B)得到61,即 0011 1101 |
^ | 如果相对应位值相同,则结果为0,否则为1。 | (A ^ B)得到49,即 0011 0001 |
~ | 按位取反运算符翻转操作数的每一位,即0变成1,1变成0。 | (〜A)得到-61,即1100 0011 |
<< | 按位左移运算符。左操作数按位左移右操作数指定的位数。 | A << 2得到240,即 1111 0000 |
>> | 按位右移运算符。左操作符按位右移右操作数指定的位数。 | A >> 2得到15即 1111 |
>>> | 按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。 | A>>>2得到15即0000 1111 |
编译运行结果:
赋值运算符
赋值运算符用来为变量指定新值。
赋值运算符格式:变量名=表达式;其功能是将等号右边表达式的值赋给左边的变量。
赋值运算符必须是类型兼容的,即左边的变量必须能够接受右边的表达式的值。否则会产生语句编译错误。例如:int i=2.12;
因为2.12是double类型,double转换到int会产生精度丢失。
使用等号(=)可以给对象赋值,这称为引用赋值,将右边对象的引用值(地址)赋值给左边的变量,两个变量地址相同,即指向同一个对象,对象引用赋值和基本数据类型的拷贝赋值是不一样。
赋值运算符由等号(=)基本运算符和扩展的赋值运算符组成。
下面是Java语言支持的赋值运算符:
操作符 | 描述 | 例子 |
= | 简单的赋值运算符,将右操作数的值赋给左侧操作数 | C = A + B将把A + B得到的值赋给C |
+= | 加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数 | C + = A等价于C = C + A |
-= | 减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数 | C - = A等价于C = C - A |
*= | 乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数 | C * = A等价于C = C * A |
/= | 除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数 | C / = A,C 与 A 同类型时等价于 C = C / A |
(%)= | 取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数 | C%= A等价于C = C%A |
<<= | 左移位赋值运算符 | C << = 2等价于C = C << 2 |
>>= | 右移位赋值运算符 | C >> = 2等价于C = C >> 2 |
&= | 按位与赋值运算符 | C&= 2等价于C = C&2 |
^= | 按位异或赋值操作符 | C ^ = 2等价于C = C ^ 2 |
|= | 按位或赋值操作符 | C | = 2等价于C = C | 2 |
编译执行结果:
条件运算符
条件运算符也叫三目运算符
语法:
实例:
运算符优先级
单目运算符包括! ~ ++ --,优先级别高
优先级别最低的是赋值运算符
可以通过()控制表达式的运算顺序,()优先级最高
从右向左结合的只有赋值运算符、三目运算符和单目运算符
算术运算符>关系运算符>逻辑运算符
下表为运算符优先级别列表
优先级 | 运算符 | 简介 | 结合性 |
1 | [ ] 、 . 、 ( ) | 方法调用,属性获取 | 从左向右 |
2 | !、~、 ++、 -- | 一元运算符 | 从右向左 |
3 | * 、/ 、% | 乘、除、取模(余数) | 从左向右 |
4 | + 、 - | 加法、减法 | 从左向右 |
5 | <<、 >>、 >>> | 左位移、右位移、无符号右移 | 从左向右 |
6 | < 、<= 、>、 >=、 instanceof | 小于、小于等于、大于、大于等于, 对象类型判断是否属于同类型 | 从左向右 |
7 | == 、!= | 2个值是否相等,2个值是否不等于。 下面有详细的解释 | 从左向右 |
8 | & | 按位与 | 从左向右 |
9 | ^ | 按位异或 | 从左向右 |
10 | | | 按位或 | 从左向右 |
11 | && | 短路与 | 从左向右 |
12 | || | 短路或 | 从左向右 |
13 | ?: | 条件运算符 | 从右向左 |
14 | =、 += 、-= 、*= 、/=、 %=、 &=、 |=、 ^=、 <、<= 、>、>= 、>>= | 混合赋值运算符 | 从右向左 |
想要获得更多知识可关注公众号IT-develop