Java运算符
Posted 凩子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java运算符相关的知识,希望对你有一定的参考价值。
首先来解释一下什么叫做运算符
对变量或常量进行操作的符号叫做运算符
组合起来即是表达式
文章目录
算术运算符
即最基本的 + - * / %
这些使用都比较简单,但要注意 / 和 % 的运用
System.out.println(3/2);
不是1.5,而是1,因为int/int得到的应该还是int
System.out.println((float)3/2); 1.5
System.out.println(3/(float)2); 1.5
只要有一个是浮点数答案就是浮点数
System.out.println((float)(3/2)); 1.0
这是先算完得到1再转换为1.0
注意:除数不能为0,借着这个错误,我们来简单看看Java对出错时的描述,如果对异常感兴趣,我会在后面出一期关于异常的博客。
System.out.println(10%3); 1
10-3*3=1
System.out.println(10%-3); 1
10-(-3)*(-3)=1
System.out.println(-10%3); -1
-10-(-3)*3=-1
System.out.println(-10%-3); -1
-10-(-3)*3=-1
从以上式子可以看出余数符号只与前面的数的符号有关
System.out.println(12.5/3); 0.5
C语言中不能进行小数取余,但java可以
增量赋值运算符
即 += -= *= /= %=
int a=2;
a+=1等同于a=a+1
但是java中增量赋值运算符可以做到自动强制类型转换
例 short b=1;
b=b+2;//这样写肯定会报警告,b+2后会整形提升,类型不匹配
b+=a;//这样写就自动完成了强转
+= -= *= /= %=被称为复合运算符,它们都可以帮我们进行一次强制类型转换
自增/自减运算符
即 ++ 、- -
前置++ 先++后使用
后置++ 后++先使用 --同理
int a=1;
int b=a++;
b=1,a=2
int a=1;
int b=++a;
b=2,a=2
a++;或++a;
这时候就是a+1,没有区别
关系运算符
共有六个关系运算符:== 、 >= 、 <= 、 > 、 < 、 !=
int a=1,b=2;
System.out.println(a>b); false
System.out.println(a<b); true
System.out.println(a>=b); false
System.out.println(a<=b); true
System.out.println(a!=b); true
System.out.println(a==b); false
这些括号中的表达式均为布尔表达式,即结果要么是true,要么是false
逻辑运算符
&&叫做逻辑与(或短路与),||叫做逻辑或(或短路或),!叫逻辑非
布尔表达式1 && 布尔表达式2
只要有一个表达式为false,整个表达式就为false
如果表达式1为假,就不再执行表达式2
例 System.out.println(1>2 && 1/0);
上面已经说过0做除数会报错,那现在会报错吗?
不会,因为1>2为假,那就不会再进行1/0这个表达式了,屏幕上打印的仅有false
布尔表达式1 || 布尔表达式2 (C语言中表达式可以是其他类型)
只要有一个表达式为true,整个表达式就为true
如果表达式1为真,就不再执行表达式2
例 System.out.println(1<2 && 1/0);
这个结果呢?
跟上面一样因为1<2为真,那就不会再进行1/0这个表达式了,屏幕上打印的仅有true
!仍然是与布尔表达式相结合
!true == false
!false == true
C语言中表达式可以是其他类型,Java没有所谓的0为假,非零为真
不建议使用&(与)和 |(或),因为它们左右两边都要执行,不支持短路求值
System.out.println(1>2 & 1/0);
System.out.println(1<2 | 1/0);
这两个都会出现异常
位运算符
位运算符主要有四个:& | ^ ~
位操作表示按二进制位运算,计算机中都是使用二进制来表示数据的(01构成的序列),按位运算就是在按照二进制位的每一位依次进行计算
按位与&:
0000 1011
0000 0101
结果 0000 0001
对应位都是1才是1,其余均为0
按位或 |:
0000 1011
0000 0101
结果 0000 1111
对应位都是0才是0,其余均为1
按位异或 ^:
0000 1011
0000 0101
结果 0000 1110
对应位不同为1,相同为0
按位取反 ~:
0000 1011
结果 1111 0100
0变成1,1变成0
移位运算符(了解即可)
移位运算符有三个:<< 、>> 、>>>(对补码使用)
左移运算符<< 相当于乘法,移n位,原数就乘2的n次方(右边补0)
0000 0110 <<1 6 0000 0110 <<2 6
0000 1100 12 0001 1000 24
右移运算符>> 相当于除法,移n位,原数就除2的n次方(左边补符号位)
0000 0110 >>1 6 0000 0110 >>2 6
0000 0011 3 0000 0001 1
注意:右移运算符对-1没有用(-1的补码为32个1,右移补得还是1,即还是-1)
无符号右移>>> 不管是不是负数,左边都补0
-1>>>1 右移后左边补0,成为非常大的正数(二进制为0后面31个1)
注意:没有无符号左移运算符
由于计算机计算移位效率高于计算乘除,当某个代码正好乘除2的n次方的时候可以用移位运算代替。
三目运算符
布尔表达式 ? 表达式1:表达式2
执行逻辑:如果布尔表达式为真,则执行表达式1;如果布尔表达式为假,则执行表达式2
int a=1;
int b=2;
int max=a>b?a:b;
可以嵌套使用
int c=3;
max=c>(a>b?a:b)?c:a>b?a:b;
优先级
运算符之间有优先级,具体无需记忆,只需在可能会产生歧义的地方加括号
注释
- 文档注释
一般用在方法和类的前面
想设置这种每个class开头自动出现的文档注释点这个教你设置 - 块注释
多行注释
/*
hello
world
*/
- 行注释
// int a=0;
注意:注释内容应内容准确(代码与注释内容一致,及时更新注释),长短适中(不能太短,不便于他人理解;不能太长,不便于后人维护)。
以上是关于Java运算符的主要内容,如果未能解决你的问题,请参考以下文章