大家好,欢迎来到IT知识分享网。
【0004】关于java中运算符优先级问题?(多个运算符出现是谁先算的问题)
知识点背景:
今天下午看一个表达式运算,发现运算顺序不是那么确定了,猜测答案也错了,,就是又忘了优先级,真服了,每次查找书又很麻烦,所以做个表格总结一下:
一、java中的运算符优先级(运算顺序)?
1.运算符优先级:(java核心技术书里面的哦)
| 运算符 | 结合性 |
|---|---|
| [] .()(方法调用) | 从左向右 |
| ! ; ~ ; ++ ; – – ; +(一元运算符) -(一元运算符) ()(强制类型转换) new | 从右向左 |
| * / % | 从左向右 |
| + – | 从左向右 |
| << >> >>> | 从左向右 |
| < <= > >= instanceof | 从左向右 |
| == != | 从左向右 |
| & | 从左向右 |
| ^ | 从左向右 |
| | | 从左向右 |
| && | 从左向右 |
| || | 从左向右 |
| ? : | 从右向左 |
| = += -= *= /= %= &= | ^= <<= >>= >>>= | 从右向左 |
java书上的没有对优先级123…顺序排序,但是可以看出是至上而下的运算符顺序(很符合当初学C语言的排序规则):
大概顺序为(以图片为主):初级(等)运算符> 单目 > 算数 > 关系 > 逻辑 >三目(条件) > 赋值
注意:1.逻辑运算符中不包括!运算符的,从图中可以看出!运算符位于第二行大于高于算数运算符优先级;2.java中不适用逗号运算符(区别于C语言)。
2.运算符有哪些主要的规则?
- 单目(一元)运算符(是指运算所需变量为一个的运算符,又叫一元运算符,)包括! ++ –,优先级高;
- 优先级别最低的是赋值运算符,初级优先级最高;同一级别的运算顺序从右向左结合性的(赋值运算符、三目运算符和单目运算符),其他的都是从左向右结合方向;
- 常用到的关系优先级:算术运算符(++)>关系运算符(>)>逻辑运算符(&&);
- 遇到不知道该怎么处理的运算符,就加()辅助,相当于把该运算符优先级提到最高,记得小学做算数有句话叫:有小括号先算小括号的;
- 记忆口诀:单目乘除后关系,逻辑三目后赋值(优先级顺序,嘿嘿)。
运算符分类和各自特点:
写到这里其实写这篇博客的主要目的已经完成了,剩下点时间写一下常用的运算符其自定义与特点吧(都在上课笔记里面)!
按目数分类:
1.单目(一元)运算符:一次作用一个变量的运算符;
例如:++ –【自增自减运算符】、!【逻辑非运算符】、~(“not”)【按位取反运算符】、(类型)【类型转换运算符】、-【负号运算符】;
1.1自增自减运算符(++ –):将变量n的当前值加一或者减一
如:n++、++n、n--、--n
例如:
int a=1;int b=++a; int c=a++;//b=2,c=1,
2.双目(二元)运算符:一次作用两个变量的运算符,;
例如:
初等运算符:[ ]【下标】、.()【方法调用】;
算术运算符:* / % + – ;
关系运算符:==、!=、>、 < 、<= 、>= ;
位运算符:&【与】、|【或】、^【异或】;>>【右移】 <<【左移】
逻辑运算符:&& 、|| !(单目的);
赋值运算符= += -= *= /= %= &= |= ^= <<= >>= >>>=;
2.1算术运算符(* / % + -):字面意思进行加、减、乘、除,取余的算术运算,和小学数学一样哈;
int a=1, b=2; int c1=a*b;int c2=a+b;
2.2关系运算符(==、!=、>、 < 、<= 、>= ;):两个数据之间进行比较的运算,运算结果成立就是true,不成立就是false,返回结果一定是一个boolean值。
int a=1,b=2;System.out.println(a==b);//false
2.3位运算符(&、|、^ 、~ ):处理整数类型时候,对组成整形数值的各个位完成操作(二进制),写到这让我想起了以前学习数字电路和模电的痛苦,哎,心疼学电路人几秒,嘿嘿,以后应该不会碰那玩意了吧(不确定),通过掩码技术得到各个位:&(“and”)、|(“or”)、^(“xor”)、~(“not”);
int a = 111;int b=(a&0b100/0b100);//1 int c=(a&(1<<3)>>3);//1
2.4逻辑运算符:&&(和,并且) 、||(或)和!(取反 )单目运算符 :他们结果只能用于boolean类型的值,常常与比较运算符连用;
具体情况:
1.&& 全都是true才是true,否则是false;
2.|| 有一个是true就是true;全都是false才是false;
3. !原来是true,变成false;即非真即假;
注意点:
1.&&和||,具有短路效果,如果左边已经可以判断得到最终结果,那么右边的代码将不再执行;位运算符&和|与其很相似,但是嘞沒具有短路效果,无论左边是否能够判断最终结果都需要执行完毕才能结束;
短路效果:(右边表达式是否执行、有没有必要执行):
对于逻辑与运算符来说,若第一个表达式为假则结果为假,此时跳过第二个表达式;(反正都会是假的,就不打算执行第二个表达式的思想)
int a=1;System.out.println(a!=1&&a++>1);//1
int a=1;System.out.println(a==1||a++>1);//1
2.&&和||至少左右需要有一个boolean值,但是!(取反)是单目运算符只要有一个boolean值即可。
2.5赋值运算符(= += -= *= /= %= &= | ^= <<= >>= >>>=):该运算符可用来将算术运算符,位运算符与赋值结合起来,从而提高代码的运行效率,简化表达式,节约代码量的作用;
注意点:复合的赋值运算符具有强制类型转化的特点;
int a=1; int b+=a;//相当于int b=(int)(b+a);
3.三目(三元、条件)运算符(?:):一次作用三个变量的运算符;
格式:
条件表达式?值1:值2(条件表达式?True:False) 1>2?111:222;//结果为:222
这篇博客有有关于对三目运算符及其嵌套有详细举例解释,想了解的可以看一下:
https://blog.csdn.net/Caojian_0/article/details/
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/106620.html