Java基础知识总结--运算符

基础阶段一:JavaSE学习_day02

在这里插入图片描述

类型转换

在java中,一些数据类型是可以相互转换的,分为两种类型转换:自动类型转换和强制类型转换

自动类型转换(隐式转换)

把一个取值范围小的变量赋值给取值范围大的变量,这种方式是自动的,可以直接赋值。

int a = 10;		// 将int类型的a直接赋值给double类型的b
double b = a;	//输出10.0

注意:

  • 在java中,整数类型默认是int类型,在byte、short、char进行运算的时候,会先自动类型提升为int类型,然后再进行运算
byte b1 = 10;
byte b2 = 20;
byte b3 = b1 + b2; 
// 第三行代码会报错,b1和b2会自动转换为int类型,计算结果为int,int赋值给byte需要强制类型转换。
// 修改为:
int num = b1 + b2;
// 或者:
byte b3 = (byte) (b1 + b2);
  • boolean类型不能与其他基本数据类型相互转换。

强制类型转换

把一个取值范围大的变量赋值给取值范围小的变量。

强制类型转换格式:

目标数据类型 变量名 = (目标数据类型)值或者变量;

​ 例如:

double a = 5.5;
int b = (int) a; // 将double类型的a强制转换为int类型,会损失精度。
System.out.println(b); // 输出5(小数位直接舍弃)

注意:

byte a = 3;
byte b = 4;
byte c = a + b; //错误。因为两个byte变量相加,会先提升为int类型
byte d = 3 + 4; //正确。常量优化机制

常量优化机制

​ 在编译时,整数常量的计算会直接算出结果,并且会自动判断该结果是否在byte取值范围内,

​ 在:编译通过

不在:编译失败

强制类型转换会损失精度,不建议使用。在后期,也会用的少。

运算符

运算符和表达式

运算符:对常量或者变量进行操作的符号。

表达式:用运算符将常量或者变量连接起来符合java语法的式子就可以称为表达式。

不同运算符连接的表达式体现的是不同类型的表达式。

算术运算符

算术运算符:+ 、- 、*、 / 、%

符号 作用
+
-
*
/
% 取余

注意事项:

/与%的区别:虽然都是除法运算,但/取结果的商,%取结果的余数。

整数操作只能得到整数,如果想得到小数,那么必须有浮点数参与运算。

字符的“+”操作

字符的本质就是数字
可以通过IDEA工具查看反编译.class文件,会发现case后的字符串值是数字组成。在switch时,会详细说明。

char类型参与算术运算,使用的是计算机底层对应的十进制数值。需要我们记住三个字符对应的数值:

'a' -- 97 a-z是连续的,所以’b’对应的数值是98,'c’是99,依次递加

'A' -- 65 A-Z是连续的,所以’B’对应的数值是66,'C’是67,依次递加

'0' -- 48 0-9是连续的,所以’1’对应的数值是49,'2’是50,依次递加

// 可以通过使用字符与整数做算术运算,得出字符对应的数值是多少
char ch1 = 'a';
System.out.println(ch1 + 1); // 输出98,97 + 1 = 98

char ch2 = 'A';
System.out.println(ch2 + 1); // 输出66,65 + 1 = 66

char ch3 = '0';
System.out.println(ch3 + 1); // 输出49,48 + 1 = 49

算术表达式中包含不同的基本数据类型的值的时候,整个算术表达式的类型会自动进行提升。

提升规则:

byte类型,short类型和char类型将被提升到int类型,不管是否有其他类型参与运算。

整个表达式的类型自动提升到与表达式中最高等级的操作数相同的类型

​ 等级顺序:byte,short,char --> int --> long --> float --> double

例如:

byte b1 = 10;
byte b2 = 20;
// byte b3 = b1 + b2; // 该行报错,因为byte类型参与算术运算会自动提示为int,int赋值给byte可能损失精度
int i3 = b1 + b2; // 应该使用int接收
byte b3 = (byte) (b1 + b2); // 或者将结果强制转换为byte类型
-------------------------------
int num1 = 10;
double num2 = 20.0;
double num3 = num1 + num2; // 使用double接收,因为num1会自动提升为double类型

字符串的“+”操作

当“+”操作中出现字符串时,这个”+”是字符串连接符,而不是算术运算。

System.out.println("itheima"+ 666); // 输出:itheima666

在”+”操作中,如果出现了字符串,就是连接运算符,否则就是算术运算。当连续进行“+”操作时,从左到右逐个执行。

System.out.println(1 + 99 + "年黑马");            // 输出:100年黑马
System.out.println(1 + 2 + "itheima" + 3 + 4);   // 输出:3itheima34
// 可以使用小括号改变运算的优先级 
System.out.println(1 + 2 + "itheima" + (3 + 4)); // 输出:3itheima7

数值拆分

需求:

​ 键盘录入一个三位数,将其拆分为个位,十位,百位,打印在控制台

示例代码:

import java.util.Scanner;
public class Test {
    
    
	public static void main(String[] args) {
    
    
		// 1:使用Scanner键盘录入一个三位数
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入一个三位数");
		int num = sc.nextInt();
		// 2:个位的计算:数值 % 10
		int ge = num % 10;		
		// 3:十位的计算:数值 / 10 % 10
		int shi = num / 10 % 10;	
		// 4:百位的计算:数值 / 100
		int bai = num / 100;
		// 5:将个位, 十位, 百位拼接上正确的字符串, 打印即可
		System.out.println("整数"+num+"个位为:" + ge);
		System.out.println("整数"+num+"十位为:" + shi);
		System.out.println("整数"+num+"百位为:" + bai);
		
	}
}

赋值运算符

赋值运算符的作用是将一个表达式的值赋给左边,左边必须是可修改的,不能是常量。

赋值运算符:= 、-= 、+= 、 /= 、 %=

符号 作用 说明
= 赋值 a = 1; 将1赋值给变量a,而不是变量a等于1.
-= 减后赋值 a -= b; 将a - b 的结果赋值给a.
+= 加后赋值 a += b; 将a + b 的结果赋值给a.
/= 除后赋值 a /= b; 将a / b 得到的商赋值给a.
%= 取后商赋值 a %= b; 将a % b 得到的余数赋值给a.

注意:

扩展的赋值运算符隐含了强制类型转换。

short s = 10;
s = s + 10; // 此行代码报错,因为运算中s提升为int类型,运算结果int赋值给short可能损失精度

s += 10; // 此行代码没有问题,隐含了强制类型转换,相当于 s = (short) (s + 10);

自增自减运算符

自增运算符:++

自减运算符: –

符号 作用 说明
++ 自增 变量的值加1
自减 变量的值减1

注意事项:

  1. ++和–,既可以放到变量前,也可以放到变量后。

  2. 单独使用的时候,++和–无论放到哪里,结果都一样。

  3. 参与操作的时候,如果放到变量前,++和–是先计算后赋值,也就是先拿变量做++或者–,后拿变量参与操作。

    int a = 10,b = 0;
    b = ++a;
    //结果:a为11,b为11;
    int a = 10,b = 0;
    b = --a;
    //结果:a为9,b为9;
    
  4. 参与操作的时候,如果放到变量后,++和–是先赋值后计算。

int a = 10,b = 0;
b = a++;
//结果:a为11,b为10;
int a = 10,b = 0;
b = a--;
//结果:a为9,b为10;

更深层次理解++或者--操作————3、4注意事项

int a = 5;
int b = (a++) + (++a) + a*10;
System.out.println("a=" + a + ";b=" + b);		
//输出的结果为:a=7;b=82
//得出结论,参与操作的时候,如果放到变量后,本身一旦运行完,将会做++或者--操作。
int b =a*10 + 1 + (++a) + (a++);
System.out.println("a=" + a + ";b=" + b);
//输出的结果为:a=7;b=63
/*
结论:java代码的运行是按照先后顺序的,也就是说是以顺序结构进行运算的,从上到下,从左到右。
因此,++或者--必须是运算时才会进行相应的操作。
*/

注意:

()虽然优先级最高,但在计算机语言中()单对++或者--并没有什么用。++或者--是否进行运算是看它何时参与操作

运算符的优先级

在这里插入图片描述

关系运算符(布尔运算符)

关系运算符:== 、<= 、>= 、< 、> 、!=

符号 说明
== a == b,判断a和b是否相等,成立为true,不成立为false
!= a != b,判断a和b是否不相等,成立为true,不成立为false
>= a >= b,判断a是否大于等于b,成立为true,不成立为false
<= a <= b,判断a是否小于等于b,成立为true,不成立为false
< a < b,判断a是否小于b,成立为true,不成立为false
> a > b,判断a是否大于b,成立为true,不成立为false

注意事项:

关系运算符结果都是boolean类型,要么是true,要么是false。

还有千万不要把 “” 误写成 “=”。"“是判断是否相等的关系,”="是赋值。

逻辑运算符

逻辑运算符:& 、| 、! 、^ 、&& 、||

符号 作用 说明
& 逻辑与 a&b,a或者b只要有一个是flase,那么结果为flase,否则为true。
| 逻辑或 a|b,a或者b只要有一个是true,那么结果为true,否则为flase。
! 逻辑非 !a, 如果a为true,那么!a则为flase,也就是说结果正好相反。
^ 逻辑异或 a^b,a和b结果相同为flase,结果不同为true

短路逻辑运算符:&& 、||

符号 作用 说明
&& 短路与 作用和&相同,但有短路效果
|| 短路或 作用和|相同,但有短路效果

在短路与计算中,只要有一个表达式为false,那么结果就会判断为false,因此就没必要继续进行下去,从而可以提高效率,同理短路或也是这种原理。

  • 逻辑与(&),不管左边是true还是false,都会执行右边。

    短路与(&&),如果左边为真,右边执行;如果左边为假,不再执行右边。

  • 逻辑或(|),不管左边是true还是false,都会执行右边。

    短路或(||),如果左边为假,右边执行;如果左边为真,不再执行右边。

    int x = 3;
    int y = 4;
    System.out.println((x++ > 4) & (y++ > 5)); // 两个表达都会运算
    System.out.println(x); // 4
    System.out.println(y); // 5
    
    System.out.println((x++ > 4) && (y++ > 5)); // 左边已经可以确定结果为false,右边不参与运算
    System.out.println(x); // 4
    System.out.println(y); // 4
    

三元运算符

三元运算符语法格式:

关系表达式 ?表达式1:表达式2

计算规则:

  1. 首先计算关系表达式。
  2. 如果值为true,表达式1的值就是运算结果。
  3. 如果值为false,表达式2的值就是运算结果。
int a = 10, b = 20;
boolean c = a > b ? a : b;
//结果c为20
//补充:三元运算符是可以嵌套使用的
boolean c = a > b ? (a < b ? a : b)  : b;

三元运算符案例

需求:

​ 一座寺庙里住着三个和尚,已知他们的身高分别为150cm、210cm、165cm,请用程序实现获取这三个和尚的最高身高。

使用三元运算符嵌套实现:

public class OperatorTest02 {
    
    
	public static void main(String[] args) {
    
    
		//1:定义三个变量用于保存和尚的身高,单位为cm,这里仅仅体现数值即可。
		int height1 = 150;
		int height2 = 210;
		int height3 = 165;	
		//2:用三元运算符嵌套,获取最大身高变量并保存。
		int maxHeight = height1 > height2 ? height1 > height3 ? height1 : height3 : height2 > height3 ? height2 : height3 ;		
		//3:输出结果
		System.out.println("maxHeight:" + maxHeight);
	}
}

猜你喜欢

转载自blog.csdn.net/Sunshine_Mr_Sun/article/details/107722058