Java基础语法:运算符
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
Ⅲ、自增自减
- 自增(++)自减(--)运算符是一元运算符。
- 分为前缀自增自减法 和后缀自增自减法 两种:前缀先进行自增或者自减运算,再进行表达式运算;后缀先进行表达式运算,再进行自增或者自减运算。
- 其操作数可以为浮点数,一般使用整数。
语法:
- 前缀自增:++var
- 前缀自减:--var
- 后缀自增:var++
- 后缀自减: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
三、关系运算符
- 关系运算符用于对两个操作数进行比较,返回结果位为布尔值。
- 该运算符用于操作对象实例,检查该对象是否是一个特定类型(类类型或接口类型)。
语法:
- 是否相等:var == var
- 是否不等:var != var
- 是否大于:var > var
- 是否小于:var < var
- 是否大于或等于:var >= var
- 是否小于或等于:var <= var
- 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。
语法:
- 逻辑与运算符:booleanVar && booleanVar
- 逻辑或运算符:booleanVar || booleanVar
- 逻辑非运算符:!booleanVar
注意:
- 逻辑与运算和逻辑或运算采用短路 的方式:
- 逻辑与(&)运算时,若第一个操作数为false,则跳过第二个操作数的布尔值判断,直接返回结果为false。
- 逻辑或(||)运算时,若第一个操作数为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,否则为0。
- 或(|):如果相对应位都是 0,则结果为 0,否则为 1。
- 异或(^):如果相对应位值相同,则结果为0,否则为1。
- 非(~):按位取反运算符翻转操作数的每一位,即0变成1,1变成0。
- 左移(<<):按位左移运算符,左操作数按位左移右操作数指定的位数。
- 右移(>>):按位右移运算符,左操作数按位右移右操作数指定的位数。
- 无符号右移(>>>):按位右移补零操作符,左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。
语法:
- 与(&):var & var
- 或(|):var | var
- 异或(^):var ^ var
- 非(~):~var
- 左移(<<):var << integer
- 右移(>>):var >> integer
- 无符号右移(>>>):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
七、扩展赋值运算符
- 用于简化代码的赋值运算符。
- 当普通二元运算符的运算结果会赋值给左操作数的时候,可以用扩展赋值运算符进行简化。
作用:
- 加和赋值操作符(+=):把左操作数和右操作数相加赋值给左操作数。等价于:varLeft = varLeft + varRight
- 减和赋值操作符(-=):把左操作数和右操作数相减赋值给左操作数。等价于:varLeft = varLeft - varRight
- 乘和赋值操作符(*=):把左操作数和右操作数相乘赋值给左操作数。等价于:varLeft = varLeft * varRight
- 除和赋值操作符(/=):把左操作数和右操作数相除赋值给左操作数。等价于:varLeft = varLeft / varRight
- 取模和赋值操作符(%=):把左操作数和右操作数取模后赋值给左操作数。等价于:varLeft = varLeft % varRight
- 左移位赋值运算符(<<=):把左操作数左移位右操作数的值后赋值给左操作数。等价于:varLeft = varLeft << varRight
- 右移位赋值运算符(>>=):把左操作数右移位右操作数的值后赋值给左操作数。等价于:varLeft = varLeft >> varRight
- 按位与赋值运算符(&=):把左操作数和右操作数按位与后赋值给左操作数。等价于:varLeft = varLeft & varRight
- 按位异或赋值操作符(^=):把左操作数和右操作数按位异或后赋值给左操作数。等价于:varLeft = varLeft ^ varRight
- 按位或赋值操作符(|=):把左操作数和右操作数按位或后赋值给左操作数。等价于:varLeft = varLeft | varRight
语法:
- 加和赋值操作符(+=):varLeft += varRight
- 减和赋值操作符(-=):varLeft -= varRight
- 乘和赋值操作符(*=):varLeft *= varRight
- 除和赋值操作符(/=):varLeft /= varRight
- 取模和赋值操作符(%=):varLeft %= varRight
- 左移位赋值运算符(<<=):varLeft <<= varRight
- 右移位赋值运算符(>>=):varLeft >>= varRight
- 按位与赋值运算符(&=):varLeft &= varRight
- 按位异或赋值操作符(^=):varLeft ^= varRight
- 按位或赋值操作符(|=):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基础语法:运算符的更多相关文章
- Java基础语法-运算符
1算术运算符 1.1运算符和表达式 运算符:对常量和变量进行操作的符号. 表达式:用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式. 不同运算符链接的表达式体现的是不同类型的表达式 ...
- java基础语法运算符
1.1 算数运算符++.--的使用 在一般情况下,算数运算符不会改变参与计算的变量值.而是在原有变量值不变的情况下,计算出新的值.但是有些操作符会改变参与计算的变量的值, ...
- JavaSE入门学习6:Java基础语法之运算符和语句(上)
继续接着上篇:JavaSE入门学习5:Java基础语法(一)来看Java的基础语法. 五运算符 运算符是一种"功能"符号,用以通知Java进行相关的运算.比方.我们须要将变量age ...
- JAVA学习(三):Java基础语法(变量、常量、数据类型、运算符与数据类型转换)
Java基础语法(变量.常量.数据类型.运算符与数据类型转换) 1.变量 Java中.用户能够通过指定数据类型和标识符来声明变量.其基本的语法为: DataType identifier; 或 Dat ...
- Java基础语法(3)-运算符
title: Java基础语法(3)-运算符 blog: CSDN data: Java学习路线及视频 1.算术运算符 算术运算符的注意问题 如果对负数取模,可以把模数负号忽略不记,如:5%-2=1. ...
- 033 01 Android 零基础入门 01 Java基础语法 03 Java运算符 13 运算符和表达式知识点总结
033 01 Android 零基础入门 01 Java基础语法 03 Java运算符 13 运算符和表达式知识点总结 本文知识点:运算符和表达式知识点总结 前面学习的几篇文都是运算符和表达式相关的知 ...
- 032 01 Android 零基础入门 01 Java基础语法 03 Java运算符 12 运算符和if-else条件语句的综合案例——闰年问题
032 01 Android 零基础入门 01 Java基础语法 03 Java运算符 12 运算符和if-else条件语句的综合案例--闰年问题 本文知识点:运算符和if-else条件语句的综合案例 ...
- 031 01 Android 零基础入门 01 Java基础语法 03 Java运算符 11 运算符的优先级
031 01 Android 零基础入门 01 Java基础语法 03 Java运算符 11 运算符的优先级 本文知识点:Java中运算符的优先级 运算符的优先级问题 前面学习了很多的运算符,如果这些 ...
- 030 01 Android 零基础入门 01 Java基础语法 03 Java运算符 10 条件运算符
030 01 Android 零基础入门 01 Java基础语法 03 Java运算符 10 条件运算符 本文知识点:Java中的条件运算符 条件运算符是Java当中唯一一个三目运算符 什么是三目运算 ...
- 029 01 Android 零基础入门 01 Java基础语法 03 Java运算符 09 逻辑“非”运算符
029 01 Android 零基础入门 01 Java基础语法 03 Java运算符 09 逻辑"非"运算符 本文知识点:Java中的逻辑"非"运算符 逻辑& ...
随机推荐
- JVM探究——转载
JVM探究 请你谈谈你对JVM的理解 Java8虚拟机和之前的变化更新 什么式OOM,什么是栈溢出StackOverFlowError?怎么分析 JVM的常用调优参数有哪些? 内存快照如何抓取,怎么分 ...
- Flink-v1.12官方网站翻译-P016-Flink DataStream API Programming Guide
Flink DataStream API编程指南 Flink中的DataStream程序是对数据流实现转换的常规程序(如过滤.更新状态.定义窗口.聚合).数据流最初是由各种来源(如消息队列.套接字流. ...
- 用werkzeug实现一个简单的python web框架
使用工具 Pycharm , Navicat , WebStorm等 使用库 Werkzeug用于实现框架的底层支撑,pymysql用于实现ORM,jinja2用于模板支持,json用于返回json数 ...
- .net core Api 部署到Linux
一.环境介绍 1..net开发环境:asp.net core 3.1 2.Linux环境:CentOS Linux release 7.9.2009 (Core) 3.Swagger: Swashbu ...
- 2019牛客暑期多校训练营(第八场)A-All-one Matrices(单调栈+思维)
>传送门< 题意:给你一个01矩阵,求出所有不可扩大的全为1的矩阵的个数 思路:比赛的时候想到了用单调栈,但是也只是想到了,并不知道怎么用,其实和之前求二维01矩阵中全为1的矩阵最大面积非 ...
- hdu2430Beans(单调队列)
Mr. Pote's shop sells beans now. He has N bags of beans in his warehouse, and he has numbered them ...
- PowerShell随笔9--- call
很多时候我们需要在一个脚本文件执行另外一个脚本文件,比如我们有一个Test.ps1文件 我们有以下2种方法: Invoke-Expression (&) 我们可以看到,Test.ps1中的代码 ...
- InstallShield 2013 Limited Edition for Visual Studio
新建打包项目后,解决方案资源管理器中的结构如下: Project Assistant界面如下: 在Project Assistant中按照步骤创建打包项目: 1.Application Informa ...
- Microsoft Office Excel 2010 常用操作
1.添加下拉菜单 (1)选中单元格 (2)数据--数据有效性--数据有效性 (3)在"有效性条件"的"允许"处,选择"序列",并在新出现的& ...
- Leetcode(8)-字符串转整数
实现 atoi,将字符串转为整数. 在找到第一个非空字符之前,需要移除掉字符串中的空格字符.如果第一个非空字符是正号或负号,选取该符号,并将其与后面尽可能多的连续的数字组合起来,这部分字符即为整数的值 ...