java基础07:运算符
算术运算符
在数学运算中最常见的加减乘除,这4种运算称为四则运算。
Java算术运算符就是用来处理四则运算的符号。
算术运算符是最简单、最常用的运算符号。
一元运算符
算术一元运算一共有 3 个,分别是 -、++ 和 --。
| 运 算 符 | 名 称 | 说 明 | 例 子 | 结果 |
|---|---|---|---|---|
| - | 取反符号 | 取反运算 | a=2;-a; | a=-2; |
| ++ | 自增(前) | 先自增再运算 | a=2;b=++a; | a=3;b=3; |
| ++ | 自增(后) | 先运算在自增 | a=2;b=a++; | a=3;b=2; |
| -- | 自减(前) | 先自减再运算 | a=2;b=--a; | a=1;b=1; |
| -- | 自减(后) | 先运算再自减 | a=2;b=a--; | a=1;b=2; |
在使用自增/自减运算时应注意下面几个问题。
- 自增/自减只能作用于变量,不允许对常量、表达式或其他类型的变量进行操作。常见的错误是试图将自增或自减运算符用于非简单变量表达式中;
- 自增/自减运算可以用于除了引用类型的其余七个数据类型;
- 自增/自减运算结果的类型与被运算的变量类型相同。
二元运算符
Java 语言中算术运算符的功能是进行算术运算,除了经常使用的加(+)、减(-)、乘()和除(\)外,还有取模运算(%)。
加(+)、减(-)、乘(*)、除(\)和我们平常接触的数学运算具有相同的含义。
| 运 算 符 | 名 称 | 说 明 | 例 子 | 结果 |
|---|---|---|---|---|
| + | 加 | 让两个数值相加,还可以拼接字符串 | a=2;b=3;c=a+b; | c=5; |
| - | 减 | 让两个数值相减 | a=2;b=3;c=a-b; | c=-1; |
| * | 乘 | 让两个数值相乘 | a=2;b=3;c=a*b; | c=6; |
| / | 除 | 让两个数值相除 | a=3;b=3;c=a/b; | c=1 |
| % | 取模 | 取余数 | a=5;b=3;c=a%b; | c=2; |
算术运算符都是双目运算符,即连接两个操作数的运算符。优先级上,*、/、% 具有相同运算级别,并高于 +、-(+、- 具有相同级别)。
整数类型的结果最容易理解,浮点型和双精度型返回的结果都带有小数,字符型将会把字符转换为 ASCII 码再运算。
整数之间的运算结果只保留整数部分,浮点型运算时保留 6 位小数部分,双精度运算时则保留 16 位小数部分。
如果在一个表达式中的多个算术运算符的优先级别相同,例如“a-b+c”,此时将按照运算符的结合方向决定顺序。算术运算符的结合方向都是“从左至右”,即先左后右。因此 b 先与减号结合,执行“a-b”的运算,再执行加 c 的运算。
赋值运算符
算术赋值运算符只是一种简写,一般用于变量自身的变化。
赋值运算符是指为变量或常量指定数值的符号。赋值运算符的符号为“ = ”,它是双目运算符,左边的操作数必须是变量,不能是常量或表达式。
其语法格式如下所示:
变量名称=数据类型
在 Java 语言中,“变量名称”和数据类型必须匹配,如果类型不匹配则需要自动转化为对应的类型。
赋值运算符的优先级低于算术运算符,结合方向是自右向左;不是数学中的等号,它表示一个动作,即将其右侧的值送到左侧的变量中(左侧只允许是变量,不能是表达式或其他形式);不要将赋值运算符与相等运算符“==”混淆。
赋值运算符与其他运算符一起使用,可以表达多种赋值运算的变异效果。例如,在基本的赋值运算符的基础之上,可以结合算术运算符,以及下面的位运算符,组合成复合的赋值运算符。
| 运 算 符 | 名 称 | 说 明 | 例 子 | 结果 |
|---|---|---|---|---|
| += | 加赋值 | 变量本身加数值再把结果返回给变量本身 | a=3;a+=1; | a=3; |
| -= | 减赋值 | 变量本身减数值再把结果返回给变量本身 | a=3;a-=1; | a=2; |
| *= | 乘赋值 | 变量本身乘数值再把结果返回给变量本身 | a=3;a*=1; | a=3; |
| /= | 除赋值 | 变量本身除数值再把结果返回给变量本身 | a=3;a/=1; | a=3; |
| %= | 取余赋值 | 变量本身取余数值再把余数返回给变量本身 | a=3;a%=2; | a=2; |
在大型程序中,灵活运用这些赋值运算符可以提高程序的易读性,并且使程序更加容易保护。
注:
- 运算符+=、-=、*=、/=、%=是两个字符构成的一个运算符,用空格从中分开写就会产生语法错误。例如
x+ =y;是错误的,但是可以写成x += y;在运算符的两侧增加空格会提高可读性。同样将运算符写反,例如 =+、=-、=/ 等形式会产生语法错误。 - 凡是两个字符构成的一个运算符同上原理。
关系运算符
关系运算符(relational operators)也可以称为“比较运算符”,用于用来比较判断两个变量或常量的大小。关系运算符是二元运算符,运算结果是 boolean 型。当运算符对应的关系成立时,运算结果是 true,否则是 false。
关系表达式是由关系运算符连接起来的表达式。关系运算符中“关系”二字的含义是指一个数据与另一个数据之间的关系,这种关系只有成立与不成立两种可能情况,可以用逻辑值来表示,逻辑上的 true 与 false 用数字 1 与 0 来表示。关系成立时表达式的结果为 true(或 1),否则表达式的结果为 false(或 0)。
| 运 算 符 | 名 称 | 说 明 | 例 子 | 结果 |
|---|---|---|---|---|
| == | 相等 | 如果进行比较的两个操作数都是数值类型,无论它们的数据类型是否相同,只要它们的值相等,也都将返回 true。 如果两个操作数都是引用类型,只有当两个引用变量的类型具有父子关系时才可以比较,只要两个引用指向的不是同一个对象就会返回 true。 Java也支持两个 boolean 类型的值进行比较。 |
3==3 97 =='a' 6.0 ==6 true ==false |
treu true true fasle |
| != | 不等 | 如果进行比较的两个操作数都是数值类型,无论它们的数据类型是否相同,只要它们的值不相等,也都将返回 true。 如果两个操作数都是引用类型,只有当两个引用变量的类型具有父子关系时才可以比较,只要两个引用指向的不是同一个对象就会返回 true。 |
3!=3 98!='a' 6.6!=6 true!=false |
false true true true |
| > | 大于 | 两边的操作数只支持数值类型,以下皆同。如果左边的数值大于右边的便会返回true。 | 2>1; | true |
| >= | 大于等于 | 如果左边的数值大于或等于右边的便会返回true。 | 2>=3; | false |
| < | 小于 | 如果左边的数值小于于右边的便会返回true。 | 2<1; | false |
| <= | 小于等于 | 如果左边的数值小于或等于右边的便会返回true。 | 2<=21; | true |
注:
-
基本类型的变量、值和引用类型的变量、值不能使用 == 进行比较;boolean 类型的变量、值与其他任意类型的变量、值不能使用 == 进行比较;如果两个引用类型之间没有父子继承关系,那么它们的变量也不能使用 == 进行比较。
-
== 和 != 可以应用于基本数据类型和引用类型。当用于引用类型比较时,比较的是两个引用是否指向同一个对象,但当时实际开发过程多数情况下,只是比较对象的内容是否相当,不需要比较是否为同一个对象。
-
由于计算机内存放的实数与实际的实数存在着一定的误差,如果对浮点数进行 ==(相等)或 !=(不相等)的比较,容易产生错误结果,应该尽量避免。
-
不要将“==”写成“=”。
关系运算符的优先级为:>、<、>=、<= 具有相同的优先级,并且高于具有相同优先级的 !=、==。关系运算符的优先级高于赋值运算符而低于算术运算符,结合方向是自左向右。
位运算符
java定义的为运算直接对整数类型的位进行操作,这些包括配四个整数类型和字符类型。
位运算符主要用来对操作数二进制的为进行计算,其操作数和运算结果都是整型值。
java中的位运算符分为位逻辑运算符和位移运算符两类。
位逻辑运算符
位逻辑运算符包含四个:&(与)、|(或)、~(非)和^(异或)。除了 ~(即位取反)为单目运算符外,取余都为双目运算符。
| 运 算 符 | 名 称 | 说 明 | 例 子 | 结果 |
|---|---|---|---|---|
| & | 与(and) | 按位进行与运算 有假为假 |
1.true&false 2.true&true 3.false&false |
1.false 2.true 3.false |
| | | 或(or) | 按位进行或运算 有真为真 |
1.true&false 2.true&true 3.false&false |
1.true 2.true 3.false |
| ! | 非(xor) | 按位进行取反运算 真为假,假为真 |
1.!true 2. !false |
1.false true |
| ^ | 异或(not) | 按位进行异或运算 同号为假,异号为真 |
1.true&false 2.true&true 3.false&false |
1.true 2.false 3.true |
位于运算符为&时,运算规则是:参与运算的数值。低位对其。高位不足的补零,如果对应的二进制为同是为1,那么计算结果才为1,否则为0,。因此,任何数与0进行位运算,其结果都为零。
假如1为真,0为假,这就很好理解了,上表已写,剩下的运算符都可以这么理解。
位移运算符
位移运算符用来将操作数想某个方向(向左或向右)移动指定的二进制位数。
| 运算符 | 名称 | 说明 | 例子 | 结果 |
|---|---|---|---|---|
| >> | 右移位运算符 | 按二进制形式把数字向右移动对应的位数,低位移出(舍弃),高位的空位补零 | 8>>1; | 4 |
| << | 左移位运算符 | 按二进制形式把数字向左移动对应的位数,高位移出(舍弃),低位的空位补零 | 9<<2; | 36 |
符合位赋值运算符
所有的二进制运算符都有一种将赋值与运算组合在一起的简写形式。复合位运算符由赋值运算符与位逻辑运算符和位移运算符组合而成。
| 运 算 符 | 名 称 | 说 明 | 例 子 | 结果 |
|---|---|---|---|---|
| &= | 与运算赋值 | |||
| |= | 或运算赋值 | |||
| ^= | 异或运算赋值 | |||
| -= | 取反运算赋值 | |||
| >> | 右移赋值 | |||
| << | 左移赋值 |
条件运算符
java提供了一个特别的三元运算符(也称三目运算符)经常用于取代某个类型的if-then-else语句。
条件运算符的符号为“ ? : ”,使用该运算符是需要有三个操作数,因此称其为三目运算符。
语法结构为:
布尔表达式?变量2:变量3;
其中,布尔表达式主要用于两个变量的比较,当布尔表达式为true时,输出变量2的值,反之则输出变量3 的值。
此三元运算符要求返回一个结果,因此要实现简单的二分支程序,即可使用该条件运算符。
技巧:
可以将条件运算符理解为if-else语句的简化形式,在使用较为简单的表达式是,使用该运算符能够简化程序代码,提高程序的易读性。
在使用该条件运算符时,还应该注意优先级问题。
浙公网安备 33010602011771号