java基础语法-运算符


前言

本文主要介绍java语言中的运算符。


1、运算符

运算符:一种特殊的符号,用以表示数据的运算、赋值和比较等。Java语言使用运算符将一个或多个操作数连缀成执行性语句,用以实现特定功能
java语言中运算符的种类:

  • 算术运算符
  • 赋值运算符
  • 比较运算符
  • 逻辑运算符
  • 位运算符
  • 类型相关运算符

1.1 算数运算符

Java支持所有的基本算术运算符,这些算术运算符用于执行基本的数学运算:加、减、乘、除和求余等。
在这里插入图片描述
+除可以作为数学的加法运算符之外,还可以作为字符串的连接运算符。-除可以作为减法运算符之外,还可以作为求负的运算符。

@Test
public void operatorTest() {
	//"+"和"-"的特殊用途
	var num=23;
	num=-num;
	System.out.println("num:"+num);//结果为num:23
	
}

/:除法运算符

  • (1)被除数和除数都是整型:
    除数不为0,结果取整
    除数为0,结果抛出异常:ArithmeticException
  • (2)被除数和除数至少有一个是浮点型:
    除数不为0:
    ①被除数不为0,结果:取精确值
    ②被除数为0,结果:0.0
    除数为0:
    ①被除数不为0,结果:Infinity或-Infinity
    ②被除数为0,结果:NaN
@Test
public void operatorTest() {
	var a = 6.3;
	var b = 2.2;
	var result = a / b;
	System.out.println("result的值:"+result);
	// 输出正无穷大:Infinity
	System.out.println("5除以0.0的结果是:" + 5 / 0.0);
	// 输出负无穷大:-Infinity
	System.out.println("-5除以0.0的结果是:" + - 5 / 0.0);
	// 下面代码将出现异常
	// java.lang.ArithmeticException: / by zero
	System.out.println("-5除以0的结果是::" + -5 / 0);
}

%:取余运算符
计算结果是使用第一个操作数除以第二个操作数,得到一个整除的结果后剩下的值就是余数。(a%b 相当于 a-(a/b)*b)

  • (1)被除数和除数都是整型
    ①除数不为0,结果取整形余数。
    ②除数为0,结果抛出异常: ArithmeticException
  • (2)被除数和除数至少有一个是浮点型:
    ①除数不为0或0.0,结果:取浮点型余数
    ②除数为0或0.0,结果:NaN
  • (3)结果的符号与被除数一致
@Test
public void operatorTest() {
	var a = 5.2;
	var b = 3.1;
	var mod = a % b;

	System.out.println(mod); // mod的值为2.1
	System.out.println("5对0.0求余的结果是:" + 5 % 0.0); // 输出非数:NaN
	System.out.println("-5.0对0求余的结果是:" + -5.0 % 0); // 输出非数:NaN
	System.out.println("0对5.0求余的结果是:" + 0 % 5.0); // 输出0.0
	System.out.println("0对0.0求余的结果是:" + 0 % 0.0); // 输出非数:NaN
	// 下面代码将出现异常:java.lang.ArithmeticException: / by zero
	System.out.println("-5对0求余的结果是:" + -5 % 0);
	
}

++:自加(将操作数的值加1)、–:自减(将操作数的值减1)

  • ① 单目运算符,只能操作一个操作数;
  • ② 单目运算符只能操作单个数值型(整型、浮点型都行)的变量,不能操作常量或表达式
  • ③ 运算符出现在操作数的左边,先把操作数加或减1,然后才把操作数放入表达式中运算;把运算符出现在操作数的右边,则先把操作数放入表达式中运算,然后才把操作数加或减1。
  • 自增和自减不会改变基本数据类型变量本身的数据类型
    在这里插入图片描述
    解释请见:酒浅未眠的博客:Java 趣事之 a=a++ 和 a=++a

1.2 赋值运算符

Java使用=作为赋值运算符,通常使用赋值运算符将一个直接量值赋给变量。
说明

  • ①当“=”两侧数据类型不一致时,可以使用自动类型转换或使用强制
    类型转换原则进行处理。
  • ②支持连续赋值。
@Test
public void operatorTest() {
	var str = "Java"; // 为变量str赋值为Java
	var str2 = str; // 将变量str的值赋给str2
	int a;
	int b;
	int c;
	// 通过为a, b, c赋值,三个变量的值都是7
	a = b = c = 7;
	// 输出三个变量的值。
	System.out.println(a + "\n" + b + "\n" + c);

	var d1 = 12.34;
	var d2 = d1 + 5; // 将表达式的值赋给d2
	System.out.println(d2); // 输出d2的值,将输出17.34
	
}

1.3 位运算符

位运算:直接对整数的二进制进行运算。

Java支持的位运算符:

  • ➢ &:按位与。当两位同时为1时才返回1。
  • ➢ |:按位或。只要有一位为1即可返回1。
  • ➢ ~:按位非。单目运算符,将操作数的每个位(包括符号位)全部取反。
  • ➢ ^:按位异或。当两位相同时返回0,不同时返回1。
  • ➢ <<:左移运算符。
  • ➢ >>:右移运算符。
  • ➢ >>>:无符号右移运算符。

在这里插入图片描述
说明:
进行移位运算时还要遵循如下规则:

  • ➢ 对于低于int类型(如byte、short和char)的操作数总是先自动类型转换为int类型后再移位。
  • ➢ 对于int类型的整数移位a>>b,当b>32时,系统先用b对32求余(因为int类型只有32位),得到的结果才是真正移位的位数。例如,a>>33和a>>1的结果完全一样,而a>>32的结果和a相同。
  • ➢ 对于long类型的整数移位a>>b,当b>64时,总是先用b对64求余(因为long类型是64位),得到的结果才是真正移位的位数。

在这里插入图片描述
^运算特点:一个数据对另一个数据按位异或两次,该数本身不变,不受位置影响。输出结果为该数的原值。

1.4 扩展后的赋值运算符

赋值运算符可与算术运算符、位移运算符结合,扩展成功能更加强大的运算符。

扩展后的赋值运算符:

  • ➢ +=:对于x+=y,相当于 x=x+y。
  • ➢ -=:对于x-=y,相当于 x=x-y。
    -➢ =:对于x=y,相当于 x=x*y。
  • ➢ /=:对于x/=y,相当于 x=x/y。
  • ➢ %=:对于x%=y,相当于 x=x%y。
  • ➢ &=:对于x&=y,相当于 x=x&y。
  • ➢ |=:对于x|=y,相当于 x=x|y。
  • ➢ ^=:对于 x^ = y,相当于 x=x^y。
  • ➢ <<=:对于x<<=y,相当于 x=x<<y。
  • ➢ >>=:对于x>>=y,相当于 x=x>>y。
  • ➢ >>>=:对于x>>>=y,相当于 x=x>>>y。

注意:+=, -=, *=, /=, %=不会改变变量本身的数据类型

1.5 比较运算符

比较运算符的结果都是boolean型,也就是要么是true,要么是false。
在这里插入图片描述
注意:
基本类型的变量、值不能和引用类型的变量、值使用 == 进行比较;boolean类型的变量、值不能与其他任意类型的变量、值使用 == 进行比较;如果两个引用类型之间没有父子继承关系,那么它们的变量也不能使用==进行比较。

1.6 逻辑运算符

逻辑运算符用于操作两个布尔型的变量或常量。

  • ➢ &&:与,前后两个操作数必须都是true才返回true,否则返回false。
  • ➢ &:不短路与,作用与&&相同,但不会短路。
  • ➢ ||:或,只要两个操作数中有一个是true,就可以返回true,否则返回false。
  • ➢ |:不短路或,作用与||相同,但不会短路。
  • ➢ !:非,只需要一个操作数,如果操作数为true,则返回false;如果操作数为false,则返回true。
  • ➢ ^:异或,当两个操作数不同时才返回true,如果两个操作数相同则返回false。
    说明:
  • “&”和“&&”的区别:
    ①单&时,左边无论真假,右边都进行运算;
    ②双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
  • “|”和“||”的区别同理,||表示:当左边为真,右边不参与运算。
  • 异或( ^ )与或( | )的不同之处是:当左右都为true时,结果为false。 异或,追求的是“异”!
@Test
public void operatorTest() {
	// 定义变量a,b,并为两个变量赋值
	var a = 5;
	var b = 10;
	// 对a > 4和b++ > 10求或运算
	if (a > 4 | b++ > 10) {
		// 输出a的值是5,b的值是11。
		System.out.println("a的值是:" + a + ",b的值是:" + b);
	}

	// 定义变量c,d,并为两个变量赋值
	var c = 5;
	var d = 10;
	// c > 4 || d++ > 10求或运算
	if (c > 4 || d++ > 10) {
		// 输出c的值是5,d的值是10。
		System.out.println("c的值是:" + c + ",d的值是:" + d);
	}

}

1.7 三目运算符

三目运算符只有一个 :?:
三目运算符的语法格式:
在这里插入图片描述

说明:

  • 三元运算符支持嵌套。不能直接在语法中打印;
  • 凡是使用三元运算符的地方,都可以改写成if-else,反之,不成立;
  • 如果程序既可以使用三元运算符,又可以使用if-else结构,那么优先选择三元运算符,原因:简洁、执行效率高。
@Test
public void operatorTest() {
	var a = 11;
	var b = 12;
	// 三目运算符支持嵌套
	//a小于b
	System.out.println(a > b ? "a大于b" : (a < b ? "a小于b" : "a等于b"));
}

1.8 运算符的优先级

Java语言中大部分运算符也是从左向右结合的,只有单目运算符、赋值运算符和三目运算符例外,其中,单目运算符、赋值运算符和三目运算符是从右向左结合的,也就是从右向左运算。
在这里插入图片描述上一行中的运算符总是优先于下一行的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值