• Java 运算符(operator)根据功能分类:

    • 算术运算符+,-,*,/,%,++,--
    • 赋值运算符=
    • 关系运算符>,<,>=,<=,==,!=,instanceof
    • 逻辑运算符&&,||,!
    • 位运算符:&,|,^,~,>>,<<,>>>
    • 条件运算符? :
    • 扩展赋值运算符:+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=
  • 运算符根据操作数据的个数分类:

    • 一元运算符:++,--,!,~
    • 二元运算符:+,-,*,/,%,=,>,<,>=,<=,==,!=,instanceof,&&,||,&,|,,>>,<<,>>>,+=,-=,*=,/=,%=,<<=,>>=,&=,=,|=
    • 三元运算符:? :
  • Java的Math类 提供了很多科学和工程计算需要的方法和常数,特殊的运算都需要运用到方法!


一、算术运算符

Ⅰ、四则运算

  • 四则运算符都是二元运算符,语法如下:

    • 加法:var + var
    • 减法:var - var
    • 乘法:var * var
    • 除法:var / var

注意:

  • 进行运算时,参与运算的两个数据中,类型转换等级最高的数据类型,就是运算结果的数据类型。
  • 整数运算时,若参与运算的两个数据是byte或short类型,运算的结果是int类型。
  • 字符串连接符:'+'运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然后再进行连接。

示例:

System.out.println(2 + 1);//3
System.out.println(2 - 1);//1
System.out.println(2 * 1);//2
System.out.println(2 / 1);//2
System.out.println(2 + (double)1);//3.0

Ⅱ、取模运算

  • 取模运算是二元运算符,语法:var % var

  • 其操作数可以为浮点数,一般使用整数。

  • 取模运算与取余运算类似,运算结果是前一个数值被后一个数值整除后多余的值。区别在于对负整数进行除法运算时操作不同,取模运算的方式是:

    • 负数 % 负数 = 负数
    • 负数 % 正数 = 负数
    • 正数 % 负数 = 正数
    • 正数 % 正数 = 正数

示例:

System.out.println(-3 % -2);//-1
System.out.println(-3 % 2);//-1
System.out.println(3 % -2);//1
System.out.println(3 % 2);//1

Ⅲ、自增自减

  • 自增(++)自减(--)运算符是一元运算符。
  • 分为前缀自增自减法后缀自增自减法 两种:前缀先进行自增或者自减运算,再进行表达式运算;后缀先进行表达式运算,再进行自增或者自减运算。
  • 其操作数可以为浮点数,一般使用整数。

语法:

  1. 前缀自增:++var
  2. 前缀自减:--var
  3. 后缀自增:var++
  4. 后缀自减:var--

示例:

int num = 1;
System.out.println(num++);//1
System.out.println(num);//2
System.out.println(num--);//2
System.out.println(num);//1
System.out.println(++num);//2
System.out.println(num);//2
System.out.println(--num);//1
System.out.println(num);//1

二、赋值运算符

  • '=',简单的赋值运算符,将右操作数的值赋给左侧操作数。

语法:var = value


三、关系运算符

  • 关系运算符用于对两个操作数进行比较,返回结果位为布尔值。
  • 该运算符用于操作对象实例,检查该对象是否是一个特定类型(类类型或接口类型)。

语法:

  1. 是否相等:var == var
  2. 是否不等:var != var
  3. 是否大于:var > var
  4. 是否小于:var < var
  5. 是否大于或等于:var >= var
  6. 是否小于或等于:var <= var
  7. instanceof运算符:object instanceof type

示例:

System.out.println(1 == 2);//false
System.out.println(1 != 2);//true
System.out.println(1 > 2);//false
System.out.println(1 < 2);//true
System.out.println(1 >= 2);//false
System.out.println(1 <= 2);//true
System.out.println("" instanceof String);//true

四、逻辑运算符

  • 逻辑运算符用于对布尔类型的数据进行运算,运算结果也为布尔类型。
  • 逻辑与运算符(&&)和逻辑或运算符(||)为二元运算符,逻辑非运算符(!)为一元运算符。
  • 逻辑与运算符,当且仅当两个操作数都为 true,结果才为 true
  • 逻辑或运算符,如果任何两个操作数任何一个为 true,结果为 true
  • 逻辑非运算符,用来反转操作数的逻辑状态,如果操作数为true,则逻辑非运算符将得到false。

语法:

  1. 逻辑与运算符:booleanVar && booleanVar
  2. 逻辑或运算符:booleanVar || booleanVar
  3. 逻辑非运算符:!booleanVar

注意:

  • 逻辑与运算和逻辑或运算采用短路 的方式:

    1. 逻辑与(&)运算时,若第一个操作数为false,则跳过第二个操作数的布尔值判断,直接返回结果为false。
    2. 逻辑或(||)运算时,若第一个操作数为true,则跳过第二个操作数的布尔值判断,直接返回结果为true。

示例:

System.out.println(true && true);//true
System.out.println(true && false);//false
System.out.println(false && false);//false
System.out.println(true || true);//true
System.out.println(true || false);//true
System.out.println(false || false);//false
int num = 1;
System.out.println(false && (num++ > 0));//false
System.out.println(num);//1
System.out.println(true || (num++ > 0));//true
System.out.println(num);//1

五、位运算符

  • 位运算符应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等类型。
  • 位运算符作用在所有的位上,并且按位运算。
  • '~'是一元运算符,其余都是二元运算符。
  • 位操作是程序设计中对位模式按位或二进制数的一元和二元操作。在许多古老的微处理器上,位运算比加减运算略快,通常位运算比乘除法运算要快很多。在现代架构中,情况并非如此:位运算的运算速度通常与加法运算相同(仍然快于乘法运算)。

作用:

  1. 与(&):如果相对应位都是1,则结果为1,否则为0。
  2. 或(|):如果相对应位都是 0,则结果为 0,否则为 1。
  3. 异或(^):如果相对应位值相同,则结果为0,否则为1。
  4. 非(~):按位取反运算符翻转操作数的每一位,即0变成1,1变成0。
  5. 左移(<<):按位左移运算符,左操作数按位左移右操作数指定的位数。
  6. 右移(>>):按位右移运算符,左操作数按位右移右操作数指定的位数。
  7. 无符号右移(>>>):按位右移补零操作符,左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。

语法:

  1. 与(&):var & var
  2. 或(|):var | var
  3. 异或(^):var ^ var
  4. 非(~):~var
  5. 左移(<<):var << integer
  6. 右移(>>):var >> integer
  7. 无符号右移(>>>):var >>> integer

示例:

int num60 = 0B0011_1100;
int num13 = 0B0000_1101;
System.out.println(num60 & num13);//12:0000 1100
System.out.println(num60 | num13);//61:0011 1101
System.out.println(num60 ^ num13);//49:0011 0001
System.out.println(~num60);//-61:1100 0011
System.out.println(num60 << 2);//240:1111 0000
System.out.println(num60 >> 2);//15:1111
System.out.println(num60 >>> 2);//15:0000 1111

六、条件运算符

  • 三元条件运算符,有三个操作数,并且需要判断布尔表达式的值。
  • 该运算符的主要是决定哪个值应该作为结果赋值给变量。

语法:type var = expression ? valueIfTrue : valueIfFalse

示例:

int number = 1;
int numResult = number > 0 ? 10 : 20;
System.out.println(numResult);//10
numResult = number < 0 ? 10 : 20;
System.out.println(numResult);//20

七、扩展赋值运算符

  • 用于简化代码的赋值运算符。
  • 当普通二元运算符的运算结果会赋值给左操作数的时候,可以用扩展赋值运算符进行简化。

作用:

  1. 加和赋值操作符(+=):把左操作数和右操作数相加赋值给左操作数。等价于:varLeft = varLeft + varRight
  2. 减和赋值操作符(-=):把左操作数和右操作数相减赋值给左操作数。等价于:varLeft = varLeft - varRight
  3. 乘和赋值操作符(*=):把左操作数和右操作数相乘赋值给左操作数。等价于:varLeft = varLeft * varRight
  4. 除和赋值操作符(/=):把左操作数和右操作数相除赋值给左操作数。等价于:varLeft = varLeft / varRight
  5. 取模和赋值操作符(%=):把左操作数和右操作数取模后赋值给左操作数。等价于:varLeft = varLeft % varRight
  6. 左移位赋值运算符(<<=):把左操作数左移位右操作数的值后赋值给左操作数。等价于:varLeft = varLeft << varRight
  7. 右移位赋值运算符(>>=):把左操作数右移位右操作数的值后赋值给左操作数。等价于:varLeft = varLeft >> varRight
  8. 按位与赋值运算符(&=):把左操作数和右操作数按位与后赋值给左操作数。等价于:varLeft = varLeft & varRight
  9. 按位异或赋值操作符(^=):把左操作数和右操作数按位异或后赋值给左操作数。等价于:varLeft = varLeft ^ varRight
  10. 按位或赋值操作符(|=):把左操作数和右操作数按位或后赋值给左操作数。等价于:varLeft = varLeft | varRight

语法:

  1. 加和赋值操作符(+=):varLeft += varRight
  2. 减和赋值操作符(-=):varLeft -= varRight
  3. 乘和赋值操作符(*=):varLeft *= varRight
  4. 除和赋值操作符(/=):varLeft /= varRight
  5. 取模和赋值操作符(%=):varLeft %= varRight
  6. 左移位赋值运算符(<<=):varLeft <<= varRight
  7. 右移位赋值运算符(>>=):varLeft >>= varRight
  8. 按位与赋值运算符(&=):varLeft &= varRight
  9. 按位异或赋值操作符(^=):varLeft ^= varRight
  10. 按位或赋值操作符(|=):varLeft |= varRight

示例:

int numberLeft = 1;
int numberRight = 2;
System.out.println(numberLeft += numberRight);//3
System.out.println(numberLeft -= numberRight);//1
System.out.println(numberLeft *= numberRight);//2
System.out.println(numberLeft /= numberRight);//1
System.out.println(numberLeft %= numberRight);//1
System.out.println(numberLeft <<= numberRight);//4
System.out.println(numberLeft >>= numberRight);//1
System.out.println(numberLeft &= numberRight);//0
System.out.println(numberLeft ^= numberRight);//2
System.out.println(numberLeft |= numberRight);//2

八、运算符优先级

  • 当多个运算符出现在一个表达式中,谁先谁后,就涉及到运算符的优先级别的问题。
  • 在实际使用时,可以多使用小括号 区分一长串表达式里的运算符优先级,提高代码的可读性。

列表(越往下优先级越低):

类别 操作符 关联性
后缀 () [] .(点操作符) 从左到右
一元 expr++ expr-- 从左到右
一元 ++expr --expr + - ~ ! 从右到左
乘性 * / % 从左到右
加性 + - 从左到右
移位 >> >>> << 从左到右
关系 > >= < <= 从左到右
相等 == != 从左到右
按位与 & 从左到右
按位异或 ^ 从左到右
按位或 | 从左到右
逻辑与 && 从左到右
逻辑或 || 从左到右
条件 ?: 从右到左
赋值 = += -= *= /= %= >>= <<= &= ^= |= 从右到左
逗号 , 从左到右

Java基础语法:运算符的更多相关文章

  1. Java基础语法-运算符

    1算术运算符 1.1运算符和表达式 运算符:对常量和变量进行操作的符号. 表达式:用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式. 不同运算符链接的表达式体现的是不同类型的表达式 ...

  2. java基础语法运算符

    1.1                算数运算符++.--的使用 在一般情况下,算数运算符不会改变参与计算的变量值.而是在原有变量值不变的情况下,计算出新的值.但是有些操作符会改变参与计算的变量的值, ...

  3. JavaSE入门学习6:Java基础语法之运算符和语句(上)

    继续接着上篇:JavaSE入门学习5:Java基础语法(一)来看Java的基础语法. 五运算符 运算符是一种"功能"符号,用以通知Java进行相关的运算.比方.我们须要将变量age ...

  4. JAVA学习(三):Java基础语法(变量、常量、数据类型、运算符与数据类型转换)

    Java基础语法(变量.常量.数据类型.运算符与数据类型转换) 1.变量 Java中.用户能够通过指定数据类型和标识符来声明变量.其基本的语法为: DataType identifier; 或 Dat ...

  5. Java基础语法(3)-运算符

    title: Java基础语法(3)-运算符 blog: CSDN data: Java学习路线及视频 1.算术运算符 算术运算符的注意问题 如果对负数取模,可以把模数负号忽略不记,如:5%-2=1. ...

  6. 033 01 Android 零基础入门 01 Java基础语法 03 Java运算符 13 运算符和表达式知识点总结

    033 01 Android 零基础入门 01 Java基础语法 03 Java运算符 13 运算符和表达式知识点总结 本文知识点:运算符和表达式知识点总结 前面学习的几篇文都是运算符和表达式相关的知 ...

  7. 032 01 Android 零基础入门 01 Java基础语法 03 Java运算符 12 运算符和if-else条件语句的综合案例——闰年问题

    032 01 Android 零基础入门 01 Java基础语法 03 Java运算符 12 运算符和if-else条件语句的综合案例--闰年问题 本文知识点:运算符和if-else条件语句的综合案例 ...

  8. 031 01 Android 零基础入门 01 Java基础语法 03 Java运算符 11 运算符的优先级

    031 01 Android 零基础入门 01 Java基础语法 03 Java运算符 11 运算符的优先级 本文知识点:Java中运算符的优先级 运算符的优先级问题 前面学习了很多的运算符,如果这些 ...

  9. 030 01 Android 零基础入门 01 Java基础语法 03 Java运算符 10 条件运算符

    030 01 Android 零基础入门 01 Java基础语法 03 Java运算符 10 条件运算符 本文知识点:Java中的条件运算符 条件运算符是Java当中唯一一个三目运算符 什么是三目运算 ...

  10. 029 01 Android 零基础入门 01 Java基础语法 03 Java运算符 09 逻辑“非”运算符

    029 01 Android 零基础入门 01 Java基础语法 03 Java运算符 09 逻辑"非"运算符 本文知识点:Java中的逻辑"非"运算符 逻辑& ...

随机推荐

  1. 自己动手实现java断点/单步调试(二)

    自从上一篇<自己动手实现java断点/单步调试(一)> 是时候应该总结一下JDI的事件了 事件类型 描述 ClassPrepareEvent 装载某个指定的类所引发的事件 ClassUnl ...

  2. shell脚本的使用该熟练起来了,你说呢?(篇三)

    继续前一篇的文章: shell脚本的使用该熟练起来了,你说呢?(篇一) shell脚本的使用该熟练起来了,你说呢?(篇二) 文章里面测试的命令脚本文件,大家关注我公众号后,可以私信我领取文件. 作者: ...

  3. 牛客网暑期ACM多校训练营(第二场)carpet

    传送门:carpet 题意 有一个n*m的地毯,aij表示地毯每格的元素,bij表示地毯每格的价格,要求选取一块价格最大值最小的地毯,并且这块地毯无限铺开之后,原地毯是其子矩阵. 题解 先找到这个矩阵 ...

  4. AtCoder Beginner Contest 170

    比赛链接:https://atcoder.jp/contests/abc170 A - Five Variables 题意 $5$ 个数中有 $1$ 个 $0$,判断是第几个. 代码 #include ...

  5. zjnu1726 STOGOVI (lca)

    Description Mirko is playing with stacks. In the beginning of the game, he has an empty stack denote ...

  6. hdu5365Shortest Path (floyd)

    Problem Description There is a path graph G=(V,E) with n vertices. Vertices are numbered from 1 to n ...

  7. Python3.9.1中如何使用match方法?

    接触编程的朋友都听过正则表达式,在python中叫re模块,属于文字处理服务里面的一个模块.re里面有一个方法叫match,接下来的文章我来详细讲解一下match. 作为新手,我建议多使用帮助文档,也 ...

  8. 继承自List<T>的类通过NewtonJson的序列化问题

    什么问题? NewtonSoft.Json是我们最常用的Json组件库之一了.这里来讨论下使用NewtonSoft.Json序列化List<T>子类的情景.序列化使用了类JsonSeria ...

  9. Python 是什么语言

    Python 是 解释型语言,强类型定义语言,动态类型定义语言 编译型语言 & 解释型语言 编译型语言:代码在执行前,需要编译(成机器语言文件,如 .exe 文件):以后再运行时,直接使用编译 ...

  10. WSL (Windows Subsystem for Linux) 的 VSLAM (Visual Simultaneous Localization and Mapping) 道路

    WSL 的 VSLAM 道路 以 Windows Subsystem for Linux 闯入 Visual Simultaneous Localization and Mapping 世界的艰难道路 ...