前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >运算符的优先级别

运算符的优先级别

原创
作者头像
用户8639654
修改2021-07-21 15:11:20
7330
修改2021-07-21 15:11:20
举报
文章被收录于专栏:云计算运维

运算符的优先级别

一、运算符的优先级

在一系列复杂的运算符中,优先级较高的运算符总是先被运算,然后才按照优先级的高低依次完成所有计算,在前面的章节中我们也简单了提到了一些运算符的优先顺序,其中优先级最高的是小括号括号:”(...)”,多个括号分割运算表达式会让一个复杂的表达式变得更具有可读性。其他的运算符按照优先级别的高低排序分别是:自加/减运算符、 算术运算符、比较运算符、逻辑运算符、赋值运算符。具体请参考下表:

顺序运算符1.括号,如 ( ) 和 [ ]2.一元运算符,如 -、++、- -和 !3.算术运算符,如 *、/、%、+ 和 -4.关系运算符,如 >、>=、<、<=、== 和 !=5.逻辑运算符,如 &、^、|、&&、||6.条件运算符和赋值运算符,如 ? :、=、*=、/=、+= 和 -=当两个运算符拥有同样优先级时跟代数的四则运算一样,从左到右依次执行表达式。当要表示一个比较复杂的运算表达式时,最好多使用小括号,可以使用表达式更加清晰,对于一些比较复杂的,尽量可以分开多个步骤,这样虽然可能会降低效率,但是可以提高代码的可读性。比如下面这个例子:

int i=1,j=2; int a=i+++j+++i++; System.out.println(a);

代码语言:javascript
复制
看着就让人头晕了,我们可以修改以下这样。

int a=(i++)+(j++)+(i++);

代码语言:javascript
复制
二、类型转换

我们在写运算符时,经常会碰到一个运算符中包含好几个不同数据类型的参数,这就涉及到数据类型的转换。java有两种类型的转换,分别是自动类型转换和强制类型转换。

1、自动类型转换

一般而言,java编译器还是比较智能的,对不同数据类型的参数,会自动转换类型,为了不至于数据的丢失,一般是较窄的数据类型转换为较宽的数据类型。也就是说如果一个short类型和一个int类型相加,那么结果就会自动转换为int类型,因为int比short数位要宽,再有如果int类型和float类型相加,那么结果是float类型,因为浮点型比整型所能表示的数据要宽。另外我们也可以把一个较窄的数据类型直接赋值给一个较宽的数据类型。总结一下,在赋值或者计算时,只要满足以下条件,就会发生自动类型转换:

(1)两种类型兼容;

(2)目标类型大于源类型;

例如:

(1)byte、char和 short 型值可提升为 int 型。如果一个操作数为 long 型,则整个表达式结果为 long 型

(2)如果一个操作数为 float 型,则整个表达式结果为 float 型。而如果一个操作数为 double 型,则整个表达式结果为 double 型

2、 强制类型转换

强制转换用于显式类型转换。但是强制类型转换需要小心使用,因为如果被转换的值的数据类型大于其目标类型,就会丢失部分信息。类型强制转换使程序将变量视为某种类型,尽管此变量中包含的是另一类型的数据,其具体格式如下:

(类型名)表达式

示例:

float a = 346.756565f; int b = (int) a + 10; // 将 c 转换为整型 System.out.println(b);

代码语言:javascript
复制
最后的结果是356,浮点型a后面的所有的小数都会丢失。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、运算符的优先级
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档