• 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. ElasticSearch的查询(二)

    一.Query String search 添加测试数据 PUT test_search { "mappings": { "test_type": { &quo ...

  2. Wormholes (spfa)

    一种路是双向的,路的长度是正值:另一种路是单向的,路的长度是负值:  如果有负环输出YES:否则输出NO:不同的路可能有相同的起点和终点:必须用邻接表 While exploring his many ...

  3. hdu5886Tower Defence(树形dp)

    Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission ...

  4. 使用scrapy爬取jian shu文章

    settings.py中一些东西的含义可以看一下这里 python的scrapy框架的使用 和xpath的使用 && scrapy中request和response的函数参数 & ...

  5. CodeCraft-20 (Div. 2) B. String Modification (字符串,规律)

    题意:有一个长度为\(n\)的字符串,你可以选取一个值\(k(1\le k \le n)\),然后遍历字符串,每次将区间长度为\(k\)的字符串反转,求反转后字典序最小的字符串,并输出\(k\)的值. ...

  6. 牛客编程巅峰赛S1第5场 - 青铜&白银 B.完全平方数的尾巴 (暴力)

    题意:有一个数\(x\),判断其是否能有某个完全平方数$mod$1000得到. 题解:直接写个for判断一下就好了,因为对1000取模,所以枚举到1000即可. 代码: class Solution ...

  7. 谈到云原生, 绕不开"容器化"

    传送门 什么是云原生? 云原生设计理念 .NET微服务 Containers 现在谈到云原生, 绕不开"容器". 在<Cloud Native Patterns>一书中 ...

  8. 数理统计9:完备统计量,指数族,充分完备统计量法,CR不等式

    昨天我们给出了统计量是UMVUE的一个必要条件:它是充分统计量的函数,且是无偏估计,但这并非充分条件.如果说一个统计量的无偏估计函数一定是UMVUE,那么它还应当具有完备性的条件,这就是我们今天将探讨 ...

  9. Nginx 动静分离概述

    目录 Nginx 动静分离是什么 Nginx 动静分离配置 Nginx 动静分离是什么 Nginx 动静分离,指的是静态资源请求由 Nginx 处理,动态资源请求由 php-fpm 处理或 tomca ...

  10. nyoj-1236 挑战密室

    挑战密室 时间限制:1 s | 内存限制:128 M 提交 状态 排名 题目描述 R组织的特工Dr. Kong 为了寻找丢失的超体元素,不幸陷入WTO密室.Dr. Kong必须尽快找到解锁密码逃离,否 ...