引言:
哈喽,各位小伙伴们大家好呀,今天这篇博客给大家详细介绍一下Java中的运算符知识,这是一篇比较详细的运算符大全,让我们一起来学习吧!
1.什么是运算符
计算机的最基本的用途之一就是执行数学运算,比如:
int a=10;
int b=20;
System.out.println(a+b);
System.out.println(a-b);
System.out.println(a*b);
System.out.println(a/b);
System.out.println(a%b);
上述的"+","-","*","/"等就是运算符,即对操作数进行操作时的符号,不同运算符操作的含义不同。
作为一门计算机语言,Java也提供了一套丰富的运算符来操作变量,Java中运算符可以分为以下:
1.算术运算符
2.关系运算符
3.逻辑运算符
4.位运算符
5.移位运算符以及条件运算符
2.算术运算符
1.基本五则运算:加减乘除取模(+,-,*,/)
public static void main(String[] args) {
int a=10;
int b=20;
System.out.println(a+b);//30
System.out.println(a-b);//-10
System.out.println(a*b);//200
System.out.println(a/b);//0
System.out.println(a%b);//10
}
注意:
1.都是二元运算,使用时必须要有左右两个操作数
2.int/int结果还是int类型,而且会向下取整
public class test {
public static void main(String[] args) {
int a=3;
int b=2;
System.out.println(a/b);//结果为1
double c=(double) a/b;
System.out.println(c);//结果为1.5
int d=10;
double e=0.5;
System.out.println(d+e);//结果为10.5,可直接相加,int类型自动提升为double
}
}
2.增量运算符(+=,-=,*=,/=,%=)
该种类型运算符操作完成后,会将操纵的结果赋值给左操作数。
public class test {
public static void main(String[] args) {
int a=3;
a+=10;//相当于a=a+10;
System.out.println(a);//13
a-=5;//相当于a=a-5;
System.out.println(a);//8
a*=2;//相当于a=a*2;
System.out.println(a);//16
a/=4;//相当于a=a/4;
System.out.println(a);//4
a%=2;//相当于a=a%2;
System.out.println(a);//0
}
}
注意:只有变量才能使用该操作符,常量不能使用
3.自增,自减运算符(++,--)
++是给变量的值+1,--是给变量的值-1.
public class test {
public static void main(String[] args) {
int a=3;
a++;//a=4
++a;//a=5
System.out.println(a++);//5
System.out.println(++a);//6
}
}
注意:
如果单独使用,前置++和后置++没有任何区别
如果混合使用,前置++先加1再使用,后置++使用再+1
只有变量才能使用自增,自减运算符,常量不能使用,因为常量不允许被修改
3.关系运算符
关系运算符主要有六个:==,!=,<,>,<=,>=。其计算结果是true或false。
public class test {
public static void main(String[] args) {
int a=3;
int b=5;
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);//false
System.out.println(a<=b);//false
}
}
注意:当需要多次判断时,需要用到&&运算符,而不能直接使用两个关系运算符。
4.逻辑运算符(重点)
逻辑运算符主要有三个:&&,||,!,运算结果都是boolean类型。
1.逻辑与&&
语法规则:表达式1&&表达式2,左右表达式必须是boolean类型的结果。
判断规则:两个表达式都为真,结果才为真,有一个为假,则结果为假。
public class test {
public static void main(String[] args) {
int a=3;
int b=5;
System.out.println(a==3&&b==5);//true
System.out.println(a>=1&&b<=10);//true
System.out.println(a<=0&&b<=10);//false
}
}
2.逻辑或||
语法规则:表达式1&&表达式2,左右表达式必须是boolean类型的结果。
判断规则:两个表达式其中一个为真,结果才为真,都为假,则结果为假。
public class test {
public static void main(String[] args) {
int a=3;
int b=5;
System.out.println(a==3||b==5);//true
System.out.println(a>=1||b<=10);//true
System.out.println(a<=0||b<=10);//true
System.out.println(a<=0||b>=100);//false
}
}
3.逻辑非!
语法规则:!表达式
输出:真变假,假变真。
public class test {
public static void main(String[] args) {
System.out.println(true);//true
System.out.println(!true);//false
System.out.println(false);//false
System.out.println(!false);//true
}
}
4.短路求值
&&和||遵守短路求值的规则
public class test {
public static void main(String[] args) {
System.out.println(10>20&&10/0==0);//false
System.out.println(10<20||10/0==0);//true
}
}
我们都知道,10/0会导致程序抛出异常,但上面的代码却能正常运行,说明10/0并没有真正被求值。
注意:
1.对于&&,如果左侧表达式为false,则表达式结果为false,无需计算右侧表达式
2.对于||,如果左侧表达式为true,则表达式结果为true,无需计算右侧表达式
5.移位运算符
移位运算符有三个:<<,>>,>>>,都是二元运算符,且都是按照二进制比特位来运算的。
1.左移<<:最左侧位不要了,最右侧补0。
public class test6 {
public static void main(String[] args) {
int a=0x10;
System.out.printf("%x\n",a<<1);//20
//注意:运行结果是按16进制打印的
}
}
注意:向左移位时,丢弃的是符号位,因此正数左移可能会出现负数
2.右移>>:最右侧位不要了,最左侧补符号位,(正数补0,负数补1)
public class test6 {
public static void main(String[] args) {
int a=0x10;
System.out.printf("%x\n",a>>1);//8
//注意:运行结果是按16进制打印的
int b=0xffff0000;
System.out.printf("%x\n",b>>1);//ffff8000
}
}
3.无符号右移>>>:最右侧位不要了,最左侧补0。
public class test6 {
public static void main(String[] args) {
int a=0x10;
System.out.printf("%x\n",a>>1);//8
//注意:运行结果是按16进制打印的
int b=0xffff0000;
System.out.printf("%x\n",b>>1);//ffff8000
}
}
注意:
1.左移1位,相当于原数字*2,左移N位,相当于原数字*2的N次方。
2.右移1位,相当于原数字/2,右移N位,相当于原数字/2的N次方。
3.由于计算机计算移位效率高于计算乘除,当某个代码正好乘除2的N次方的时候可以用移位运算代替。
4.移动负数位或者移动位数过大都没有意义。
6.条件运算符
条件运算符只有一个:
表达式1?表达式2:表达式3
当表达式1的值为true的时候,整个表达式的值为表达式2的值。
当表达式1的值为false的时候,整个表达式的值为表达式3的值。
它是Java中唯一一个的三目运算符,是条件判断语句的简化写法。
public class test6 {
public static void main(String[] args) {
//求两个数的最大值
int a=10;
int b=20;
int max=a>b?a:b;
System.out.println(max);//20
}
}
注意:
1.表达式2和表达式3的结果是要同种类型的,除非能发生类型隐式类型转换。
2.表达式不能单独存在,其产生的结果必须是要被使用。
7.运算符的优先级
在一条表达式中,各个运算符可以混合起来使用进行运算,但是运算符的优先级不同,比如*和/的优先级要高于+和-,有些情况下稍不注意,可能就会造成很大的麻烦。
例如:求a和b的平均值
public class test6 {
public static void main(String[] args) {
//求两个数的最大值
int a=10;
int b=20;
int c=a+(b-a)>>1;
System.out.println(c);//10
}
}
上述表达式中,由于+的优先级高于>>,所以a和b-a的结果做加法,整体为20,最后再进行右移,因此结果为10。
注意:
运算符之间是有优先级的,在存在歧义时加上括号即可。
public class test6 {
public static void main(String[] args) {
//求两个数的最大值
int a=10;
int b=20;
int c=a+((b-a)>>1);
System.out.println(c);//10
}
}
小结:
本篇博客详细介绍了Java中的不同运算符,我们需要掌握它们,以便在后续Java的学习当中使用起来如鱼得水,那么本篇博客到这里就结束啦,给个点赞关注支持一下吧!