• 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中详述线程间协作

    线程协作 首先引入一段代码: package 线程间数据共享; import java.util.Date; public class Watch { private static String ti ...

  2. 机器学习算法之Kmeans算法(K均值算法)

    Kmeans算法(K均值算法) KMeans算法是典型的基于距离的聚类算法,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大.该算法认为簇是由距离靠近的对象组成的,因此把得到紧凑 ...

  3. Python3列表、元组及之间的区别和转换

    文章目录 1. 列表(list) 1.1 列表创建.切片.删除.检索 1.2 列表常用函数 2. 元组(tuple) 3. 列表与元组区别及转换 1. 列表(list) 1.1 列表创建.切片.删除. ...

  4. 数学知识-欧拉函数&快速幂

    欧拉函数 定义 对于正整数n,欧拉函数是小于或等于n的正整数中与n互质的数的数目,记作φ(n). 算法思路 既然求解每个数的欧拉函数,都需要知道他的质因子,而不需要个数 因此,我们只需求出他的质因子, ...

  5. codeforces 920E(非原创)

    E. Connected Components? time limit per test 2 seconds memory limit per test 256 megabytes input sta ...

  6. RT-Thread学习笔记1-启动顺序与线程创建

    目录 1. 启动顺序 2. 堆范围 3. 线程创建 3.1 线程代码(入口函数) 3.2 线程控制块 3.3 线程栈 4. 系统滴答时钟 5. GPIO驱动架构操作IO 6. 线程优先级 & ...

  7. Vue UI lib missing vue bug

    Vue UI lib missing vue bug Error Uncaught TypeError: Cannot read property 'prototype' of undefined a ...

  8. ESLint & husky & git commit limit

    ESLint & husky & git commit limit 2 == error .eslintrc { "extends": "eslint-c ...

  9. taro router

    taro router https://nervjs.github.io/taro/docs/router.html bug import Taro, { Component, Config } fr ...

  10. 小程序 & taro 踩坑指南

    小程序 & taro 踩坑指南 微信开发者工具, 不支持 react bug https://github.com/NervJS/taro/issues/5042 solution just ...