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中的逻辑"非"运算符 逻辑& ...
随机推荐
- Java中详述线程间协作
线程协作 首先引入一段代码: package 线程间数据共享; import java.util.Date; public class Watch { private static String ti ...
- 机器学习算法之Kmeans算法(K均值算法)
Kmeans算法(K均值算法) KMeans算法是典型的基于距离的聚类算法,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大.该算法认为簇是由距离靠近的对象组成的,因此把得到紧凑 ...
- Python3列表、元组及之间的区别和转换
文章目录 1. 列表(list) 1.1 列表创建.切片.删除.检索 1.2 列表常用函数 2. 元组(tuple) 3. 列表与元组区别及转换 1. 列表(list) 1.1 列表创建.切片.删除. ...
- 数学知识-欧拉函数&快速幂
欧拉函数 定义 对于正整数n,欧拉函数是小于或等于n的正整数中与n互质的数的数目,记作φ(n). 算法思路 既然求解每个数的欧拉函数,都需要知道他的质因子,而不需要个数 因此,我们只需求出他的质因子, ...
- codeforces 920E(非原创)
E. Connected Components? time limit per test 2 seconds memory limit per test 256 megabytes input sta ...
- RT-Thread学习笔记1-启动顺序与线程创建
目录 1. 启动顺序 2. 堆范围 3. 线程创建 3.1 线程代码(入口函数) 3.2 线程控制块 3.3 线程栈 4. 系统滴答时钟 5. GPIO驱动架构操作IO 6. 线程优先级 & ...
- Vue UI lib missing vue bug
Vue UI lib missing vue bug Error Uncaught TypeError: Cannot read property 'prototype' of undefined a ...
- ESLint & husky & git commit limit
ESLint & husky & git commit limit 2 == error .eslintrc { "extends": "eslint-c ...
- taro router
taro router https://nervjs.github.io/taro/docs/router.html bug import Taro, { Component, Config } fr ...
- 小程序 & taro 踩坑指南
小程序 & taro 踩坑指南 微信开发者工具, 不支持 react bug https://github.com/NervJS/taro/issues/5042 solution just ...