Java编程进阶运算符与表达式
Posted 橙子!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java编程进阶运算符与表达式相关的知识,希望对你有一定的参考价值。
推荐学习专栏:Java 编程进阶之路【从入门到精通】
文章目录
1. Java运算符
计算机诞生的初衷是为了进行数学的运算,Java 作为一门计算机编程语言,同样也提供了用于操纵变量的运算符
来进行数学运算。
我们把用于数据的运算,赋值,比较等的一系列符号称之为运算符。大概可以分为以下几类:
- 算数运算符
- 关系运算符
- 位运算符
- 逻辑运算符
- 赋值运算符
- 其他运算符
下面对以上几类运算符中常用运算符做一个详解。
1.1 算数运算符
这里的算数运算符的运算和数学中的运算相同。例如,1 + 3 = 3 。
运算符 | 运算 |
---|---|
+ | 加法 |
- | 减法 |
* | 乘法 |
/ | 除法 |
% | 取余 |
++ | 自加 |
- - | 自减 |
例如,进行如下的运算,查看运算结果:
public class Test
public static void main(String[] args)
int a = 15;
int b = 20;
int c = 30;
int d = 40;
System.out.println("a + b = " + (a + b) );
System.out.println("a - b = " + (a - b) );
System.out.println("a * b = " + (a * b) );
System.out.println("b / a = " + (b / a) );
System.out.println("b % a = " + (b % a) );
System.out.println("c % a = " + (c % a) );
System.out.println("a++ = " + (a++) );
System.out.println("a-- = " + (a--) );
// d++ 与 ++d 的运算方式是不同的
System.out.println("d++ = " + (d++) );
System.out.println("++d = " + (++d) );
运算结果:
a + b = 35
a - b = -5
a * b = 300
b / a = 1
b % a = 5
c % a = 0
a++ = 15
a-- = 16
d++ = 40
++d = 42
这里,特别要着重强调的是自加自减
运算符。
前缀自增自减法(++a,- -a): 先进行自增或者自减运算,再进行表达式运算。
后缀自增自减法(a++,a- -): 先进行表达式运算,再进行自增或者自减运算。
实例:
int a=10;
a++;
此时表达式的值是 10 ,a = 11 。
int a = 10 ;
++ a ;
此时 a = 11 ,表达式的值为 11 。
1.2 关系运算符
下面是Java支持的关系运算符:
运算符 | 描述 |
---|---|
== | 检查两个操作数的值是否相等,如果相等则为真。 |
!= | 检查两个操作数的值是否相等,如果值不相等则为真。 |
> | 检查左操作数的值是否大于右操作数的值,如果是那么为真。 |
< | 检查左操作数的值是否小于右操作数的值,如果是那么为真。 |
>= | 检查左操作数的值是否大于或等于右操作数的值,如果是那么为真。 |
<= | 检查左操作数的值是否小于或等于右操作数的值,如果是那么为真。 |
例如,通过输出关系比较结果来演示关系运算符:
public class Test
public static void main(String[] args)
int a = 10;
int b = 20;
System.out.println("a == b = " + (a == b) );
System.out.println("a != b = " + (a != b) );
System.out.println("a > b = " + (a > b) );
System.out.println("a < b = " + (a < b) );
System.out.println("b >= a = " + (b >= a) );
System.out.println("b <= a = " + (b <= a) );
运行结果:
a == b = false
a != b = true
a > b = false
a < b = true
b >= a = true
b <= a = false
1.3 位运算符
Java定义了位运算符作用于整形,字符型,字节型等类型中。
运算符 | 描述 |
---|---|
& | 如果相对应位都是1,则结果为1,否则为0 |
| | 如果相对应位都是 0,则结果为 0,否则为 1 |
^ | 如果相对应位值相同,则结果为0,否则为1 (A ^ B)得到49,即 0011 0001 |
〜 | 按位取反运算符翻转操作数的每一位,即0变成1,1变成0。 |
<< | 按位左移运算符。左操作数按位左移右操作数指定的位数。 |
>> | 按位右移运算符。左操作数按位右移右操作数指定的位数。 |
>>> | 按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。 |
按照一下的案例进行位运算符的练习:
public class Test
public static void main(String[] args)
int a = 60; /* 60 = 0011 1100 */
int b = 13; /* 13 = 0000 1101 */
int c = 0;
c = a & b; /* 12 = 0000 1100 */
System.out.println("a & b = " + c );
c = a | b; /* 61 = 0011 1101 */
System.out.println("a | b = " + c );
c = a ^ b; /* 49 = 0011 0001 */
System.out.println("a ^ b = " + c );
c = ~a; /*-61 = 1100 0011 */
System.out.println("~a = " + c );
c = a << 2; /* 240 = 1111 0000 */
System.out.println("a << 2 = " + c );
c = a >> 2; /* 15 = 1111 */
System.out.println("a >> 2 = " + c );
c = a >>> 2; /* 15 = 0000 1111 */
System.out.println("a >>> 2 = " + c );
运行结果:
a & b = 12
a | b = 61
a ^ b = 49
~a = -61
a << 2 = 240
a >> 2 = 15
a >>> 2 = 15
1.4 逻辑运算符
下面是Java中定义的逻辑运算符:
运算符 | 描述 |
---|---|
&& | 称为逻辑与运算符。当且仅当两个操作数都为真,条件才为真。 |
|| | 称为逻辑或操作符。如果任何两个操作数任何一个为真,条件为真。 |
! | 称为逻辑非运算符。用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false。 |
下面进行逻辑运算符的练习:
public class Test
public static void main(String[] args)
boolean a = true;
boolean b = false;
System.out.println("a && b = " + (a&&b));
System.out.println("a || b = " + (a||b) );
System.out.println("!(a && b) = " + !(a && b));
运行结果:
a && b = false
a || b = true
!(a && b) = true
1.5 赋值运算符
下面是Java语言支持的赋值运算符:
运算符 | 描述 |
---|---|
= | 简单的赋值运算符,将右操作数的值赋给左侧操作数 |
+ = | 加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数 |
- = | 减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数 |
* = | 乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数 |
/ = | 除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数 |
(%)= | 取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数 |
<< = | 左移位赋值运算符 |
>> = | 右移位赋值运算符 |
&= | 按位与赋值运算符 |
^ = | 按位异或赋值操作符 |
| = | 按位或赋值操作符 |
接下来练习赋值运算符:
public class Test
public static void main(String[] args)
int a = 10;
int b = 20;
int c = 0;
c = a + b;
System.out.println("c = a + b = " + c );
c += a ;
System.out.println("c += a = " + c );
c -= a ;
System.out.println("c -= a = " + c );
c *= a ;
System.out.println("c *= a = " + c );
a = 10;
c = 15;
c /= a ;
System.out.println("c /= a = " + c );
a = 10;
c = 15;
c %= a ;
System.out.println("c %= a = " + c );
c <<= 2 ;
System.out.println("c <<= 2 = " + c );
c >>= 2 ;
System.out.println("c >>= 2 = " + c );
c >>= 2 ;
System.out.println("c >>= 2 = " + c );
c &= a ;
System.out.println("c &= a = " + c );
c ^= a ;
System.out.println("c ^= a = " + c );
c |= a ;
System.out.println("c |= a = " + c );
运算符:
c = a + b = 30
c += a = 40
c -= a = 30
c *= a = 300
c /= a = 1
c %= a = 5
c <<= 2 = 20
c >>= 2 = 5
c >>= 2 = 1
c &= a = 0
c ^= a = 10
c |= a = 10
1.6 其他运算符
条件运算符( ? : )
条件运算符又被叫做三目运算符,运算时需要三个操作数。
int num = a > b ? a : b ;
三目运算符还可以结合赋值运算符一起使用,例如上面的例子中,判断变量 a 和变量 b 的大小,如果是 a>b 的话,则表达式的结果为 a ,否则为 b ,所以,三目运算符在运算时要判断布尔表达式的值。
2. 表达式
表达式是指由常量、变量、操作数等与运算符所组合而成的语句,例如 a + b
,表达式最终运行结果即为表达式的值,值的类型就是表达式的类型。
运算符的优先级,决定了表达式的运算顺序。
3. Java运算符优先级
如果一个表达式中出现了多个运算符,我们先计算哪一部分呢?事实上,不同的计算顺序,计算结果的差异是非常大的,所以这时就出现你了运算符的优先级问题。
下面把运算符的优先级全部整理到一个表格里面,表格越上面,优先级越高,优先级越高,运算时越在前面计算。
类别 | 运算符 | 关联性 |
---|---|---|
后缀 | () [] . (点操作符) | 左到右 |
一元 | expr++ expr– | 从左到右 |
一元 | ++expr --expr + - ~ ! | 从右到左 |
乘性 | * /% | 左到右 |
加性 | + - | 左到右 |
移位 | >> >>> << | 左到右 |
关系 | > >= < <= | 左到右 |
相等 | == != | 左到右 |
按位与 | & | 左到右 |
按位异或 | ^ | 左到右 |
按位或 | | | 左到右 |
逻辑与 | && | 左到右 |
逻辑或 | || | 左到右 |
条件 | ?: | 从右到左 |
赋值 | = + = - = * = / =%= >> = << =&= ^ = | = | 从右到左 |
逗号 | , | 左到右 |
欢迎订阅学习Java编程进阶之路专栏,专栏文章持续更新!
以上是关于Java编程进阶运算符与表达式的主要内容,如果未能解决你的问题,请参考以下文章