一、概述
java运算符主要分为六大类:算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符和条件运算符。
Java运算符
二、算术运算符
Java的算术运算符主要有:加(+)、减(-)、乘()、除(/)、取余(%)*,当算术表达式中存在不同的基本数据类型的值的时候,整个算术表达式的类型会自动进行提升。
byte类型,short类型和char类型将被提升到int类型,不管是否有其他类型参与运算。
整个表达式的类型自动提升到与表达式中最高等级的操作数相同的类型
等级顺序:byte,short,char → int → long → float → double
从这个顺序我们可以看出byte、short、char是最低的,所以在程序开发中我们很少使用byte或者short类型定义整数。基本不会使用char类型定义字符,而使用字符串类型,更不会使用char类型做算术运算。
int a = 2; int b = 5; System.out.println("a+b="+(a+b)); System.out.println("b-a="+(b-a)); System.out.println("a*b="+(a*b)); System.out.println("b/a="+(b/a)); System.out.println("b%a="+(b%a)); //当出现不同类型的数据时,因为float>int,所有结果会自动转为float型 float c = 2.2f; System.out.println("c+b="+(c+b)); System.out.println("b-c="+(b-c)); System.out.println("c*b="+(c*b)); System.out.println("b/c="+(b/c)); 输出: a+b=7 b-a=3 a*b=10 b/a=2 b%a=1 c+b=7.2 b-c=2.8 c*b=11.0 b/c=2.2727273
二、赋值运算符
赋值运算符主要有:=、+=、-=、*=、/=、%=、++、--,赋值运算符是将一个表达式的值赋值给左边,左边不能是一个常量,必须是可变的。
int a = 2;//最常见的赋值 int b = 5; int c = 0; c += b;//c=c+b System.out.println("c += b--->c="+c);//c=0+5 c -= a;//c=c-a System.out.println("c -= a--->c="+c);//c=5-2 c *= a;//c=c*a System.out.println("c *= a--->c="+c);//c=3*2 c /= a;//c=c/a System.out.println("c /= a--->c="+c);//c=6/2 c %= a;//c=c%a System.out.println("c /= a--->c="+c);//c=3%2
关于自增(++)与自减(--)详解
(1)(i++、i--)先赋值、再运算
(2)(++i、--i)先运算、再赋值
int i = 2;int a = i++;//先赋值再运算,即:先将i(此时i=2)赋值给a,再进行++运算i,i=i+1=3System.out.println(a);//输出2System.out.println(i);//输出3int t = 2;System.out.println(t++);//先输出t(此时t=2),输出2System.out.println(t);//上一步已做了t++操作,所以输出3
int i = 2;int a = ++i;//先运算再赋值,即:先进行++运算i,i=i+1=3,再将i(此时i=3)赋值给a,System.out.println(a);//输出3System.out.println(i);//输出3int t = 2;System.out.println(++t);//先进行++运算(此时t=t+1),输出3System.out.println(t);//上一步已做了t++操作,所以输出3
三、关系运算符
关系运算符主要有:==、!=、>、<、>=、<=,关系运算符一般称为“比较运算符”,通常用来比较两个常量或变量的大小,当运算符关系成立时,结果为true,否则为false。
关系运算符的优先级为:>、<、>=、<= 具有相同的优先级,并且高于具有相同优先级的 !=、==。关系运算符的优先级高于赋值运算符而低于算术运算符,结合方向是自左向右。
四、逻辑运算符
逻辑运算符主要有:&、|、^、!、&&、||。
(1)&和&&都表示与,有且仅当a、b都为true时,结果为true,&&有短路的效果,当第一个当前条件为false时,后面的条件就不执行,结果为false,&要对所有的条件进行判断
(2)|和||都表示或,有且仅当a、b都为false时,结果为false,||有短路的效果,当第一个当前条件为true时,后面的条件就不执行,结果为true,|要对所有的条件进行判断。
(3)异或(^)运算规则:当两边同为true或者同为false时,结果都为false;当两边为false和true时,结果为true。
int a = 10;int b = 20;float c = 2.1f;System.out.println((a<b) & (c>0));//先判断a<b为true,再判断c>0为true,结果为trueSystem.out.println((a>b) & (c>0));//先判断a>b为false,再判断c>0为true,结果为falseSystem.out.println((a>b) && (c>0));//因为a>b为false,所以后面c>0就不判断,结果为falseSystem.out.println((a<b) && (c>0));//因为a<b为true,所以继续判断c>0为true,结果为trueSystem.out.println((a<b) && (c<0));//因为a<b为true,所以继续判断c<0为false,结果为falseSystem.out.println((a>b) | (c>0));//先判断a>b为false,再判断c>0为true,结果为trueSystem.out.println((a>b) | (c<0));//先判断a>b为false,再判断c<0为false,结果为falseSystem.out.println((a>b) || (c>0));//因为a>b为false,所以继续判断c>0为true,结果为trueSystem.out.println((a>b) || (c<0));//因为a>b为false,所以继续判断c<0为false,结果为falseSystem.out.println((a<b) || (c>0));//因为a<b为true,所以后面c>0就不判断,结果为trueSystem.out.println(true ^ true);//结果为falseSystem.out.println(false ^ false);//结果为falseSystem.out.println(false ^ true);//结果为true
五、位运算符
位运算符主要有:~、&、&、^、>>、<<、>>>,位运算符主要针对二进制运算。运算时需要先将十进制转为二进制(注意一个字节有8位,前面需补0)
(1)与运算(&)
只有两个位同为1时,结果才为1,都在为0
int a = 16;//二进制为0001 0000int b = 20;//二进制为0001 0100System.out.println(Integer.toBinaryString(a));//输出其二进制0001 0000System.out.println(Integer.toBinaryString(b));//输出其二进制0001 0100System.out.println("a 和b 与的结果是:"+(a&b));//输出16
详解:
16: 0001 0000
<u style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; margin: 0px; padding: 0px; border: 0px;">20: 0001 0100</u>
值16: 10000
(2)或运算符(|)
两个位只要有一个为1,结果就是1,否则为0
int a = 19;//二进制为0001 0011int b = 22;//二进制为0001 0110System.out.println(Integer.toBinaryString(a));System.out.println(Integer.toBinaryString(b));System.out.println("a 和b 或的结果是:"+(a|b));//输出23
详解:
19: 0001 0011
22: <u style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; margin: 0px; padding: 0px; border: 0px;">0001 0110</u>
值23: 0001 0111
(3)非运算符(~)
如果位为0,结果是1,如果位为1,结果是0。
int a = 4;//二进制为0000 0100System.out.println("a 非的结果是:"+(~a));//输出-5
详解:
4: <u style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; margin: 0px; padding: 0px; border: 0px;">0000 0100</u>
值-5: 1111 1011
注意:二进制中,最高位是符号位 1表示负数,0表示正数
(4)异或运算符(^)
如果两个位相同,结果就为0,不同结果就为1
int a = 7;//二进制为111int b = 20;//二进制为10100System.out.println("a 和b 异或的结果是:"+(a^b));//输出19
详解:
7: 0000 0111
20: <u style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; margin: 0px; padding: 0px; border: 0px;">0001 0100</u>
值19: 0001 0011
(5)左移运算符(<<)
就是将所有的位向左移动多少位
int a = 7;//二进制为111System.out.println("a 左移2位的结果是:"+(a<<2));//输出28
详解:
操作前00000111
左移后00011100
尾部补0,首位去0
a<<b 快速计算: a << b = a * 2b
(6)右移运算符(>>)
规则同左移运算符
六、条件运算符
关系表达式?表达式1:表达式2(相当于ifelse)
int a = 7;int b = 20;System.out.println(a>b?"a大于b":"a小于b");//a小于b
文末总结:
在我们平时实际开发中,我们要着重掌握算术运算符、赋值运算符中的自增自减和(+=、-=、=)、关系运算符、逻辑运算符的(&&、||、!),这些使用率非常高,位运算符的话一般情况下用的比较少,除了某些特定的技术。条件运算符相当于ifelse简写,能有效的简化代码,需要重点掌握。
另外我还准备了Java运算符的视频教程供各位小伙伴们学习:
想要学习了解关于Java运算符等的更多知识,可以点赞转发加关注,然后私信回复【Java集合1001】即可免费得到获取方式啦,免费,免费,免费,重要的事情说三遍。