前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java 有运算符:算术、赋值、比较、三元、逻辑、位,且看运算符优先级如何处置

Java 有运算符:算术、赋值、比较、三元、逻辑、位,且看运算符优先级如何处置

作者头像
老夫编程说
修改2020-04-28 12:57:55
9910
修改2020-04-28 12:57:55
举报
文章被收录于专栏:Java 温故知新Java 温故知新
Java 运算符
Java 运算符

算术运算符 Arithmetic operators

加号(+):在操作数值、字符、字符串时其结果各有不同;

  • 字符相加得到的是ASCII码表值;
  • 字符串相加时表示将字符串拼接在一起,得到的是组合后的新字符串;
  • 两个数值相加表示数学中的加法运算;

除号(/):整数在使用除号操作时,得到的结果仍为整数,小数部分会被直接忽略,而不是四舍五入,但是当整数除以0的时候,会引发算术异常(ArithmeticException)。

Exception in thread "main" java.lang.ArithmeticException: / by zero
  • 正无穷大(Infinity):当一个正浮点类型数除以0时,或者正整数除以0.0时;
  • 负无穷大(-Infinity):当一个负浮点类型数除以0时,或者负整数除以0.0时;
  • NaN(Not a Number):当0.0除以0.0时出现;

需要注意的是:正负无穷大和NaN都属于double浮点类型,并且所有的正无穷大都是相等的,所有的负无穷大也是相等的,但是NaN永远不相等,也不等于自己。

算术运算符 Arithmetic operators
算术运算符 Arithmetic operators

取模(求余数:%):模数的符号忽略不计,结果的正负取决于被取模的数。

++ 和 -- :表示所操作的变量自增1和自减1,都只能操作变量,不能操作常量;

  • 自增:++,自增操作符,变量值自增1,有前置和后置之分,只能操作变量。
  • 自减:-- ,自减操作符,变量值自减1,有前置和后置之分,只能操作变量。

自增和自减具体操作是一样的,增量和减量都是1;比如:代码 result ++和 ++result,都是将result变量的值在原始值的基础上增加1,然后赋值给result;代码 result --和 --result,都是将result变量的值在原始值的基础上减去1,然后赋值给result。唯一的区别是:

  • 前置(++result): 表示对result增加1之后的结果进行运算;
  • 后置(result++): 表示对result变量值增加1之前的值(原始值)进行运算,然后再对result增加1;

无论是前置还是后置,最后都会对result增加1;如果仅仅执行简单的递增操作(只写result++或++result)比如单行操作,那么选用任意一个都可以,比如下边这样的:

代码块

result++;

代码块

赋值运算符 Assigning operator

赋值运算符 Assigning operator
赋值运算符 Assigning operator

注意:Java支持同时给多个变量赋值,好比支持同时声明多个变量一样,但因影响代码可读性,故也不推荐。

加等于:如:x += 5; 相当于 x = x + 5,但还包括隐式类型转换。

public static void main(String[] args){

    int a, b, c;  // 不推荐

    a = b = c = 5; // 不推荐

    short s = 5;

     // s = s + 3; // 编译出错,需要强转 s = (short)(s + 3);

     s += 3; // 编译OK,隐式类型转换

}

比较运算符 Comparison operator

用于比较两个变量或常量之间的关系,其结果是boolean类型,其操作格式为:

boolean result = 表达式A 比较运算符 表达式B;

==:等于,若比较的两个变量都是数值类型,即使类型不同,只要值相同就OK,就会返回true。另外,== 也可以比较引用数据类型,表示的是操作符两边的对象是否是同一对象,比较的是JVM中的内存地址;

instanceof:用于判断右边的对象是否是左边类型的实例;

比较运算符 Comparison operator
比较运算符 Comparison operator

三元运算符 Ternary operator

三元运算符,表示有三个元素参与的表达式,所以又称为三目运算符,其语义表示if-else,语法格式如下:

X    ?    Y  :Z;

其中X为boolean类型表达式,先计算X的值,若X结果为true,则返回Y,整个三目运算表达式的结果是Y,否则就是Z。三目运算符结果的类型由Y和Z决定。

可以通过以下的实例验证:

1. 两个数求最大值/最小值;

int a = 13;int b = 14;int maxValue = (a > b) ? a : b ;

2. 判断一个数的是奇数还是偶数;

int i = 13;
String result = (i % 2) ==  0 ? "偶数" :  "奇数"  ;

逻辑运算符 Logical operator

用于操作两个boolean类型的变量或常量,结果类型也是boolean。语法格式为:

boolean result = 表达式A 逻辑运算符 表达式B; 
逻辑运算符 Logical operator
逻辑运算符 Logical operator
  • &:表示并且,当操作数A和B都为true时result才为true,否则就是false。
  • &&:和&结果相同,具有短路效果,如果左边操作数A是false,result 一定为false,且不运行B的运算。
  • |:表示或者,A和B都为false时结果为false,只要有A或B是true,结果就是true。
  • ||:和|结果相同,具有短路效果,如果左边操作数A是true,result一定为true,操作数B就不会执行,因为已经没有这个必要了。
  • ^:判断A和B是否不同,不同则为true,相同则为false。
  • !:取反,!true结果是false,!fasle结果是true。

位运算符 Bit operator

位操作是程序设计中按位对二进制数数据的一元和二元操作。详情如下:

位运算符
位运算符

<<:将操作数的二进制码整体左移指定位数,左移之后的空使用“0”来补充。

>>:将操作数的二进制码整体右移指定位数,右移之后的空使用“符号位”来补充:

  • 若是正数使用“0”补充;
  • 若是负数使用“1”补充;(操作负数:取反,求补,操作,取反,求补)

>>>:将操作数的二进制码整体右移指定位数,右移之后的空位使用“0”来补充。

若要交换两个变量的值,如int a = 3,int b = 5,交换后a 等于5,b等于3,我们可以定义第三方的变量来完成。现在要求使用最快的方式完成,怎么做?

运算符优先级

在程序设计中有众多运算符,运算符之间的操作会有先后之分,也称优先级,详情如下:

运算符优先级
运算符优先级

表中的优先级1 -- 14,优先级依次从高到低,同一级按表中从右到左,或者从左到右的顺序执行。

Java语言分隔符

  • 分号(;):语句的分割,表示一个代码语句结束;
  • 花括号({}):表示一个代码块,是一个整体,花括号要成对使用;在面向对象的理念中,代码块通常表示一个或者多个业务逻辑;
  • 方括号([]):通常是定义数组和访问数组元素时使用;
  • 圆括号(()):使用很广泛,如数据类型转换、数据运算、方法的定义和使用等;
  • 圆点(.):类和对象访问它的成员时使用,如:Arrays.sort();
  • 空格( ):把一整个代码语句语句分割成几段,空格的使用次数不限,和英语中单词之间要使用空格是一样的。

JAVA 中算术运算符使用注意

  1. 以上分隔符都必须都是半角下的英文符号;
  2. 要注意区分空格和空白,空格对应的是键盘上的空格键的输入,在Java中,空格是可以作为一个有效字符使用的,而空白相对于空格来说要宽泛得多,也可以说空白是由大量的空字符组成的;

完结。老夫虽不正经,但老夫一身的才华

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 老夫不正经 微信公众号,前往查看

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

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 算术运算符 Arithmetic operators
  • 赋值运算符 Assigning operator
  • 比较运算符 Comparison operator
  • 三元运算符 Ternary operator
  • 逻辑运算符 Logical operator
  • 位运算符 Bit operator
  • 运算符优先级
  • Java语言分隔符
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档