Java运算符(九)
Java语言中常用的运算符可分为如下几种:
算术运算符
赋值运算符
关系运算符(比较运算符)
逻辑运算符
条件运算符
算术运算符
主要用于进行基本的算术运算,如加法、减法、乘法、除法等。
%用来求余数,也称为“取模运算符”。
++和--出现在操作数的左边或右边,结果是不同的。例如:
运行结果:
注意:自增和自减运算符只能用于操作变量,不能直接用于操作数值或常量!例如:5++ 、 8--等写法都是错误的。
Java中运算规则与数学运算中的规则是相同的。优先级上:*、/、%具有相同运算级别,并高于+、-(+、-具有相同级别)。
运行结果:2
进行算术运算时应注意以下两点:
- 求余(%)运算要求参与运算的两个操作数均为整型,不能为其他类型。
- 两个整数进行除法运算,其结果仍为整数。如果整数与实数(浮点数)进行除法运算,则结果为实数(浮点数)。
例如:
int x=2,y=1; 表达式y/x的结果是0。 (1)
float x=2.0f; int y=1;表达式y/x的结果是0.5。 (2)
在(1)中整型变量x和y相除,其结果仍为整型数据0。
在(2)中由于两个不同类型的数据进行运算,此时首先要进行类型转换,会把int型的y转换成与x一样的float型,然后相除,最终结果为float类型的数字0.5。
赋值运算符
赋值运算符是指为变量或常量指定数值的符号。如:可以使用“=”将右边的表达式结果赋给左边的操作数。
Java 支持的常用赋值运算符,如下表所示:
例如:
运行结果:
关系运算符(比较运算符)
关系(比较)运算符用于判断两个数据的大小,例如:大于、等于、不等于。运算结果是boolean型。当运算符对应的关系成立时,运算结果是true,否则是false。
Java 中常用的比较运算符如下表所示:
注意:
- 基本类型的变量、值不能和引用类型的变量、值使用 == 进行比较boolean 类型的变量、值不能与其他任意类型的变量、值使用==进行比较;如果两个引用类型之间没有父子继承关系,那么它们的变量也不能使用==进行比较。
- ==和!=可以应用于基本数据类型和引用类型。当用于引用类型比较时,比较的是两个引用是否指向同一个对象,但在实际开发过程中,多数情况下只是比较对象的内容是否相同,不需要比较是否为同一个对象。
- 关系运算符的优先级为:>、<、>=、<=具有相同的优先级,并且高于具有相同优先级!=、==。关系运算符的优先级高于赋值运算符而低于算术运算符,结合方向是自左向右。
运行结果:
关系表达式通常用于 Java 程序的逻辑判断语句的条件表达式中。使用关系表达式要注意以下几点:
- 运算符>=、==、!=、<=是两个字符构成的一个运算符,用空格从中分开写就会产生语法错误。例如x> =y;
是错误的,但是可以写成x >= y;
在运算符的两侧增加空格会提高可读性。同样将运算符写反,例如=>、=<、=!等形式会产生语法错误。
- 由于计算机内存放的实数(浮点数)与实际的实数存在着一定的误差,如果对浮点数进行==(相等或 !=(不相等)的比较,容易产生错误结果,应该尽量避免。
- 不要将“==”写成“=”。
例如:
- a > b // 比较变量a的值是否大于变量b的值
- x+y> = z // 比较变量x与变量y的和是否大于或等于变量z的值
- width * width+size != area // 比较变量width的平方加上变量size的值是否与变量area的值不相等
- name == "zhht" // 比较变量name的值是否等于字符串nzht
- pass != "123456" // 比较变量pass的值是否不等于字符串“123456”
逻辑运算符
逻辑运算符把各个运算的关系表达式连接起来组成一个复杂的逻辑表达式,以判断程序中的表达式是否成立,判断的结果是true或false。
逻辑运算符是对布尔型变量进行运算,其结果也是布尔型。
逻辑运算符的优先级为:!运算级别最高,&&运算高于||运算。!运算符的优先级高于算术运算符,而&&和||运算则低于关系运算符。
我们可以从“投票选举”的角度理解逻辑运算符:
- 与:要求所有人都投票同意,才能通过某议题。
- 或:只要求一个人投票同意就可以通过某议题。
- 非:某人原本投票同意,通过非运算符,可以使其投票无效。
- 异或:有且只能有一个人投票同意,才可以通过某议题。
运行结果:
&&与&区别:如果a为false,则不计算b(因为不论b为何值,结果都为false)。
||与|区别:如果a为true,则不计算b(因为不论b为何值,结果都为true)。
注意:短路与(&&)和短路或(||)能够采用最优化的计算方式,从而提高效率。在实际编程时,应该优先考虑使用短路与和短路或。
条件运算符
条件运算符也被称为三元运算符(也叫三目运算符),经常被用来取代某个类型的if-then-else语句。(使用该运算符时需要有三个操作数,因此称其为三元运算符。)
使用条件运算符的一般语法结构为:result = <expression> ? <statement1> : <statement2>;
其中,expression是一个布尔表达式。当expression为真时,执行statement1,否则就执行statement2。
运行结果:
运算符的优先级
将Java语言中运算符的优先级共分为14级,其中1级优先级最高,14级优先级最低。在同一个表达式中运算符优先级高的先执行~
PS:没必要去死记运算符的优先级顺序,实际开发中,一般会使用小括号辅助进行优先级管理。例如:
运行结果: