1,+-*/% 运算符的作用。
为什么变量在参与运算的时候需要类型的提升?
Java规定了,只有同一种数据类型的变量在参与运算,才能得到结果。
如果类型不一样,那么前后是不能运算的
int i = 10;
long l = 100L;
i + l; //在Java中这样是不能直接运算的。
//因为前面的是int类型。后面的是long类型
//类型不一致,所以不能直接运算。
//如果一定要让这两个相加,那么必须要进行类型的转换
类型的转换的规则:
1.取值范围比int小的变量,在参与运算的时候会自动提升为 int 类型
byte short char
byte b1 = 10;
byte b2 = 20;
byte b = b1 + b2; //b1和b2取值范围比int小,在参与运算的时候类型会自动提升为int
System.out.println(b);
2.取值范围比int大的变量,在参与运算的时候会提升为取值范围最大的那个类型。
int i = 10;
int ii = 20;
int result = i + ii;//数据类型刚好是int,所以可以直接参与运算
float f = 10.1F;
double d = 20.2;
double result = f + d;//f是float类型的,d是double类型的,取值范围都比int大。
//而double的取值范围是最大的,所以最终就提升为double
强调:
所有的小数取值范围一定比所有的整数取值范围要大
double > float > long > int > short > byte
2.字符+和字符串+
字符串的+:拼接。
任意数据类型的变量或者值 + 字符串 那么做的都是拼接操作。
System.out.println(1 + "a");//1a
System.out.println("a" + 1);//a1
System.out.println(1 + "a" + 1);//1a1
System.out.println(1 + 2 + "a");//3a
System.out.println("a" + 1 + 2);//a12
System.out.println(1 + 2 + "a" + 1 + 2);//3a12
"aaa" + "bbb" = "aaabbb"
"aaa" + "bbb" + "ccc" = "aaabbbccc"
1 + "abc" = "1abc"
"abc" + 123 = "abc123"
123 + 123 + "abc" = "246abc"
字符+
字符参与运算的时候,会先把字符变成数字,再拿着这个数字参与运算。
我怎么知道字符对应的数字是什么啊?
计算机中的一张表 ASCII码表
为什么要有这样的表?就是因为计算机在存储的时候都是以二进制0101010101这样的形式存储的。
为了能让计算机能存储字母,所以拿着每一个字母跟固定的数字都产生一个对应关系,就是为了解决字母存储问题。
在ASCII码表中,数字跟字母都有一个 一一对应的关系。
'a' 只能对应数字 97
97 也只能对应字母 'a'
'a' + 1 = 98
会先查码表'a' 先变成97,
再拿着97参与运算。
97 + 1 = 98
总结:
字符串+ : 就是拼接
字符参与运算 就是先查找再计算。
4,看代码说结果
int a = 10;
a++; //就是把a这个变量记录的值+1. 当这行代码执行完毕时,a就变成了11.
++a; //就是把a这个变量记录的值+1. 当这行代码执行完毕时,a就变成了12.
System.out.println(a);//12
所以自增自减运算符,只要大家掌握单独成一行的计算规则就可以了。
因为以后我们基本上都是单独成行书写的。
以自增为例,不管是先++ 还是后++。
只要单独成一行,那么结果都是一样的。都是让变量的值自动增长一个。
5,
int a = 10;
a = a + 20;
//运算完毕之后a为30
与
int a = 10;
a+=20;
问两者的区别?
+= :
就是把左边和右边的值进行相加操作,再把结果赋值给左边。
其中还隐藏了一个强制类型转换
byte b = 10;
b += 20;
相当于: b = (byte)(b + 20);
6, & | 的区别:
注意点:
1.这两个运算符怎么打出来? &(shift + 7) |(shift + 杠(一般是在回车的上面))
2.运算逻辑:
&:且
只有左边和右边都是true时,结果才是true。
|: 或
只要左边和右边有一个为true,那么结果就是true。
&与&&的区别:
最终运算逻辑是一模一样的。
&:不管在什么情况下,左边和右边都会参与运行。
左边的运算逻辑 & 右边的运算逻辑
左边的运算逻辑 && 右边的运算逻辑
如果左边的结果为false,那么右边就不会参与运算了
左边的运算逻辑 || 右边的运算逻辑
如果左边的结果为true,那么右边就不会参与运算了
所以在实际开发和后面写练习的时候,我们使用短路&& || 更多一些。
7,三元表达式的格式
三元表达式/三元运算符
格式:
表达式A ? 表达式B :表达式C ;
注意点:
1.三元表达式不能单独出现,结果一定要被使用。可以直接输出,也可以是赋值。
int a = 10;
int b = 20;
a > b ? a : b ; //单独的放在这里是错误的。
//输出
System.out.println(a > b ? a : b);
//赋值
int max = a > b ? a : b;
2.表达式B和表达式C数据类型一定要跟左边的接收变量的类型一致。
案例:
int max = a > b ? a : b;
max ,a , b 三者之间的数据类型要保持一致。
3.表达式B和表达式C一定要有一个结果,不能直接写输出语句
int max = a > b ? System.out.println(a): System.out.println(b);
//在这样的情况下,没有任何数据可以赋值给max,所以语法错误。
8,完成练习:
b,定义两个变量。判断两个数是否相等
int a = 10;
int b = 20;
boolean result = a == b ? true : false;
System.out.println(result);
c,定义三个变量。求最大值
int a = 10;
int b = 30;
int c = 20;
int temp = a > b ? a : b ;
int max = temp > c ? temp : c ;
System.out.println(max);
定义三个变量,求最小值
int a = 10;
int b = 30;
int c = 20;
int temp = a < b ? a : b ;
int min = temp < c ? temp : c ;
System.out.println(min);
扩散:
定义三个变量,我想把这三个变量从小到大打印出来。
int a = 10;
int b = 30;
int c = 20;
步骤:
1、先求出最大值
int tempMax = a > b ? a : b ;
int max = temp > c ? temp : c ;
2、再求出最小值
int tempMin = a < b ? a : b ;
int min = temp < c ? temp : c ;
3、最后求出中间值
int mid = a + b + c - max - min;
System.out.println("最大值" + max);
System.out.println("中间值" + mid);
System.out.println("最小值" + min);
a.定义两个变量。求两个数的和
int a = 10;
int b = 20;
int sum = a + b;
System.out.println(sum);
|
|