Java学习之旅(四):运算符

运算符是一些特殊的符号,主要用于数学函数、一些类型的赋值语句和逻辑比较方面。Java中提供了丰富的运算符,如赋值运算符、算术运算符、比较运算符等。

赋值运算符

赋值运算符以符号“=”表示,它是一个二元运算符,其功能是将右方操作数所含的值赋给左方的操作数。例如:

int a = 123;

该表达式是将123赋值给变量a。左方的操作数必须是一个变量,而右边的操作数则可以是任何表达式,包括变量、常量、有效的表达式。由于赋值运算符“=”处理时会先取得右方表达式处理后的结果,因此一个表达式中若含有两个以上的“=”赋值运算符,会从最右边的“=”开始处理。

public class test {
	
	public static void main(String[] args) {
		
		int a,b,c;
		a = 15;
		c = b = a + 4;		//将a与4的和赋值给变量b,然后再赋值给变量c
		
		System.out.println("a = " + a);
		System.out.println("b = " + b);
		System.out.println("c = " + c);
		
	}
}

在Java中可以把赋值运算符连在一起使用,如a = b = c = 11;在这个语句中,变量a、b、c都能得到同样的值11。但是在实际工作和开发中不建议使用这种赋值语句。

算术运算符

Java中的算术运算符主要有+、-、*、/和%,它们都是二元运算符。

Java算术运算符
运算符说明实例结果
+12.45f + 1527.45
-4.56 - 0.164.4
*5L * 12.45f62.25
/7 / 23
%求余16 % 3

1

其中,+和-运算符还可以作为数据的正负符号。需要特别注意的是,再进行除法运算时,0不能作为除数。如果0作为除数,那么系统会抛出“ArithmeticException”异常。

public class test {
	
	public static void main(String[] args) {
		
		float number1 = 45.56f;
		int number2 = 152;
		
		System.out.println(number1 + " + " + number2 + " = " + (number1 + number2));
		System.out.println(number1 + " - " + number2 + " = " + (number1 - number2));
		System.out.println(number1 + " * " + number2 + " = " + (number1 * number2));
		System.out.println(number1 + " / " + number2 + " = " + (number1 / number2));
		
	}

}

自增和自减运算符

自增和自减运算符都是单目运算符,可以放在操作元之前,也可以放在操作元之后。操作元必须是一个整型或浮点型变量。自增、自减运算符的作用是使变量的值加1或减1。放在操作元前面的自增、自减运算符,会先将变量的值加1(减1),然后再使该变量参与表达式的运算。放在操作元后面的自增、自减运算符,会先使变量参与表达式的运算,然后再将该变量加1(减1)。

++a;            //表示在使用变量a之前,先使a的值加1
--a;            //表示在使用变量a之前,先使a的值减1
a++;            //表示在使用变量a之后,再使a的值加1
a--;            //表示在使用变量a之后,再使a的值减1

其实,++a和a++的作用都相当于a = a + 1。

//假设a = 4
b = ++a;            //先将a的值加1,然后赋给b,此时a = 5,b = 5
b = a++;            //先将a的值赋给b,然后将a的值加1,此时a = 5,b = 4

比较运算符

比较运算符属于二元运算符,用于程序中的变量之间、变量和自变量之间以及其他类型的信息之间的比较。比较运算符的运算结果是boolean型。当运算符对应的关系成立时,运算结果为true,否则为false。所有比较运算符通常作为判断的依据用在条件语句中。比较运算符一共有6个。

比较运算符
运算符作用举例操作数据类型结果
>比较左方是否大于右方'a' > 'b'整型、浮点型、字符型false
<比较左方是否小于右方156 < 789整型、浮点型、字符型true
==比较左方是否等于右方'c' == 'c'基本数据类型、引用类型true
>=比较左方是否大于等于右方456 >= 123整型、浮点型、字符型true
<=比较左方是否小于等于右方123.123 <= 123.456整型、浮点型、字符型true
!=比较左方是否不等于右方'x' != 'y'基本数据类型、引用类型true
public class test {
	
	public static void main(String[] args) {
		
		int number1 = 123;
		int number2 = 456;
		
		System.out.println(number1 + " > " + number2 + " ? " + (number1 > number2));
		System.out.println(number1 + " < " + number2 + " ? " + (number1 < number2));
		System.out.println(number1 + " == " + number2 + " ? " + (number1 == number2));
		System.out.println(number1 + " >= " + number2 + " ? " + (number1 >= number2));
		System.out.println(number1 + " <= " + number2 + " ? " + (number1 <= number2));
		System.out.println(number1 + " != " + number2 + " ? " + (number1 != number2));
		
	}
}

逻辑运算符

返回类型为布尔值的表达式,如比较运算符,可以被组合在一起构成一个更复杂的表达式。这是通过逻辑运算符来实现的。逻辑运算符包括&(&&)(逻辑与)、||(逻辑或)、!(逻辑非)。逻辑运算符的操作元必须是boolean型数据。在逻辑运算符中,除了“!”是一元运算符之外,其他都是二元运算符。

逻辑运算符
运算符含义用法结合方向
&&、&逻辑与op1 && op2从左到右
||逻辑或op1 || op2从左到右
!逻辑非!op1从右到左

结果为boolean型的变量或表达式可以通过逻辑运算符组合为逻辑表达式。用逻辑运算符进行逻辑运算时,其结果如下:

使用逻辑运算符进行逻辑运算
op1op2op1 && op2op1 || op2!op1
truetruetruetruefalse
truefalsefalsetruefalse
falsetruefalsetruetrue
falsefalsefalsefalsetrue

逻辑运算符“&&”和“&”都表示“逻辑与”,那么它们之间的区别在哪里呢?当两个表达式都为true时,“逻辑与”的结果才会是true。使用逻辑运算符“&”会判断两个表达式;而逻辑运算符“&&”则是针对boolean类型的类进行判断,当第一个表达式为false时则不去判断第二个表达式,直接输出结果从而节省计算机判断的次数。通常将这种在逻辑表达式中从左端的表达式可推断出整个表达式的值称为“短路”,而那些始终执行逻辑运算符两边的表达式称为“非短路”。“&&”属于“短路”运算符,而“&”属于“非短路”运算符。

public class test {
	
    public static void main(String[] args) {
		
	int a = 123;
	int b = 456;
		
	System.out.println("(" + a + " > " + b + ") && (" + a + " != " + b + ") ? " + ((a > b) && (a != b)));
	System.out.println("(" + a + " > " + b + ") || (" + a + " != " + b + ") ? " + ((a > b) || (a != b)));
		
    }
}

位运算符

位运算符除“按位与”和“按位或”运算符之外,其他只能用于处理整数的操作数。位运算是完全针对位方面的操作。整型数据在内存中以二进制的形式表示,如int型变量7的二进制表示是00000000 00000000 00000000 00000111。左边最高位是符号位,最高位是0表示正数,若为1则表示负数。负数采用补码表示,如-8的二进制表示为11111111 11111111 11111111 11111000。这样就可以对整型数据进行按位运算。

  • “按位与”运算

“按位与”运算的运算符为“&”,是双目运算符。“按位与”运算的运算规则是如果两个整型数据a、b对应位都是1,则结果位才是1,否则为0,即同1则1。如果两个操作数的精度不同,则结果的精度与精度高的操作数相同。

  • “按位或”运算

“按位或”运算的运算符为“|”,是双目运算符。“按位或”运算的运算规则是如果两个操作数对应位都是0,则结果位才是0,否则为1,即有1则1。如果两个操作数的精度不同,则结果的精度与精度高的操作数相同。

  • “按位取反”运算

“按位取反”运算也称“按位非”运算,运算符为“~”,是单目运算符。“按位取反”就是要将操作数二进制中的1修改为0,0修改为1。

  • “按位异或”运算

“按位异或”运算的运算符是“^”,是双目运算符。“按位异或”运算的运算规则是当两个操作数的二进制表示相同时,结果为0,否则为1,即相同则0。若两个操作数的精度不同,则结果数的精度与精度高的操作数相同。

  • 移位操作

除了上述运算符之外,还可以对数据按二进制位进行移位操作。Java中的移位运算符有以下3种:

  1. <<:左移
  2. >>:右移
  3. >>>:无符号右移

左移就是将运算符左边的操作数的二进制数据按照运算符右边操作数指定的位数向左移动,右边移空的部分补0。右移比左移复杂一些。当使用>>运算符时,如果最高位是0,则右移空的位就补0;如果最高位是1,右移空的位就补1。

Java还提供了无符号右移“>>>”,无论最高位是0还是1,左侧被移空的高位都补0。移位运算符适用的数据类型有byte、short、char、int和long。移位可以实现整数除以2或乘以2^{n}的效果。例如,y << 2与y * 4的结果相同;y >> 1的结果与y / 2的结果相同。总之,一个数左移n位,就是将这个数乘以2^{n},一个数右移n位,就是将这个数除以2^{n}

  • 三元运算符

三元运算符的使用格式为:

条件式 ? 值1 : 值2

三元运算符的运算规则为:若条件表达式的值为true,则整个表达式取值1,否则取值2。

20 < 45 ? true : false

表达式“20 < 45”的运算结果返回真,那么就取值true,相反,若表达式“45 < 20”返回为假,则取值false。三元运算符其实就等价于if……else语句。

 

运算符优先级

Java中的表达式就是使用运算符连接起来的符合Java规则的式子。运算符的优先级决定了表达式中运算执行的先后顺序。通常优先级由高到低的顺序依次是:

  • 增量和减量运算
  • 算术运算
  • 比较运算
  • 逻辑运算
  • 赋值运算

如果两个运算有相同的优先级,那么左边的表达式要比右边的表达式先被处理。

运算符的优先级
优先级描述运算符
1括号()
2正负号+、-
3一元运算符++、--、!
4乘除*、/、%
5加减+、-
6移位运算>>、>>>、<<
7比较大小<、>、>=、<=
8比较是否相等==、!=
9按位与运算&
10按位异或运算^
11按位或运算|
12逻辑与运算&&
13逻辑或运算||
14三元运算符? :
15赋值运算符=

在编写程序时尽量使用括号来限定运算次序!!!

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值