总结
数据类型转换
-
概念:将数据从一种格式或结构转换为另一种格式或结构的过程。
-
作用:
-
节约内存空间
-
将一些类型转换为项目所需要的类型
-
-
类型转换分类
- 自动隐式转换
-
定义:将小的数据类型转换大的数据类型
-
注意事项:
-
在Java中,boolean类型与所有其他7种类型都不能进行转换。
-
其他 7种数据类型,它们之间都可以进行转换,但是可能会存在精度损失或者其他一些变化。
byte -> short -> int -> long-> float-> double
char -> int -> long-> float-> double
byte与char 不能自动转换
char与short不能自动转换
由于小数(浮点数) 的存储方式,结构和整数不一样,所以,float哪怕是4个字节、long是8个字节,表示范围也大于long类型。
-
特例:只看类型,不看值
int a = 129; byte b = (byte)a;// 编译器只看容器不看值 System.out.println(b);// 结果为-127
-
-
强制转换
- 定义:将大数据类型转为小数据类型
- 注意事项:
- 高转低会导致精度丢失,有数据的溢出风险。溢出的时候,会以二进制进位。
- 实际开发中:应该要知道被强制转换的数据,是在一个已知的范围。
- 当int类型的具体的值,向byte、short、char类型转换的时候,值只要在其表示范围内,都会隐式转换。
-
类型转换小结
byte short(char) int long float(单精度) double(双精度) (只有数值类型才能相互转换) ----------------从左到右精度越来越高-------------------->
-
小转大,都是可以隐式转换 (从左到右)
-
大转小,必须强制转换 (从右到左) 强制转换有数据的溢出风险。溢出的时候,会以二进制进位
-
强制转换语法:
小的数据类型 小的变量 = (小的数据类型)大的变量/值;
-
当int类型的具体的值,向byte、short、char类型转换的时候,值只要在其表示范围内,都会隐式转换
-
表达式
-
表达式概念:由一系列的常量、变量、运算符、括号()等组成的一个算术式,按照一定的运算规则计算出一个结果值。(括号可以提高运算的优先级)
-
表达式规律:
- 当表达式中所有的变量类型小于int的时候,运算后的结果都会自动提升为int类型。
- 当表达式中有变量类型大于int的时候,运算后的结果以表达式中精度最高的为主。
-
表达式小结:
-
概念:就是一个算术式。 例如: 1 + 1 + 2*3
-
规律:
1. 当表达式中所有的变量类型小于 int的时候,运算后的结果都会自动提升为int类型
2. 当表达式中有变量类型大于 int的时候,运算后的结果以表达式中精度最高的为主
-
运算符
-
算数运算
-
+:加号。只有String字符串参与的加法运算,才有拼接功能,在String之前,表示加法 运算,之后,才表示连接
-:减号。
*:乘号。
/:除号。不能除0%:模(也叫取余)相当于求余数。例如:10 % 3 ,表示求10除3的余数,结果是1
作用:1. 求余数 2. 找一个数的倍数 3. 可以拆分一个多位的数字 -
特殊情况:
-
10 / 3 = 3
-
10.0 / 3 = 3.33333…
-
0 / 0
-
0.0 / 0.0 结果是NaN ,任何的NaN都不等于自己(面试题)
-
1.0 / 0.0 结果:Infinity,表示无穷大
-
-
-
自增自减运算
-
自增自减运算符:++ --
-
注意事项:
-
自增自减只能够用于变量,不能用于常量
-
自增自减运算的优先级比其他算术运算符高
-
一般用在循环语句中
-
-
使用要点:
- 把整个表达式看成是一个整体。
- 如果变量名在前面,那么整个表达式的值就是原来值不变。
- 如果变量名在后面,那么整个表达式的值就是原来的值加1。
-
-
赋值运算
-
赋值运算(Assignment Operation):是优先级最低的一种运算,等 = 后边的所有运算完毕后,才执行赋值运算。
-
赋值运算符常用的符号:
+= 累加
-= 累减
*=
/=
%= -
赋值运算注意事项:
- 从右到左,把符号右边的值赋值到左边的变量中
- 上面符号看成是一个整体: 例如 += 看成是一个符号,不要看成两个。
- 赋值运算有强制转换功能,可以避免类型提升.会有溢出风险
-
-
比较运算
-
比较运算(Compare Operation):结果一定是boolean类型
-
常用符号:> ,< ,>= ,<= ,==
-
注意事项:
-
比较基本类型,比较的是值是否相等
例如:
int a = 1;
int b = 1;
System.out.println(a == b); //true -
比较引用类型,比较的是地址是否相等
-
!=: 不等于
- 比较基本类型,比较的是值是否不相等
- 比较引用类型,比较的是地址是否不相等
-
-
-
三目运算
-
语法: x ? y : z;// 表示如果x为true,执行y,x为false则执行
x: 是boolean类型值或者boolean表达式。
y、z: 可以是表达式,也可以是值或者变量。
y和z可以是不同的数据类型,但是如果要接收三目运算的结果,必须要求y和z的类型完全一致
三目运算可以嵌套使用
-
-
逻辑运算
-
概念:用来连接布尔类型的两个值或表达式,逻辑运算两边必须是布尔类型的值或者是布尔类型表达式。通常配合循环和条件语句使用,最终结果也位布尔类型
-
作用:应用于多个条件的组合判断。
-
逻辑运算符运算规则
& :逻辑单与,表示并且,有假即假,没有短路功能,有位运算功能,两边都为true ,结果为true。
| :逻辑单或,表示或者,有真即真,没有短路功能,有位运算功能,只要有一边为true,结果为true。
&& :逻辑双与,表示并且,有假即假,有短路功能,没有位运算功能,两边都为true ,结果为true。
|| : 逻辑双或,表示或者,有真即真,有短路功能,没有位运算功能,只要有一边为true,结果为true。
^ : 逻辑异或,同假异真【了解 现实开发,基本不用】,两边不一样,结果为true ,否则为false。
! :逻辑非,表示取反,非真即假,非假即真 (操作一个变量/值)。 -
&&、||和 &、| 的区别
-
&&、|| :有短路功能
-
&、| :没有短路功能
-
什么是短路?
短路问题:当逻辑运算左边能够确定整个表达式结果值的时候,就会发生短路,不会再计算后面的结果了,这样可以提供程序运算效率。
-
-
-
位运算
- 概念:程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算就是直接对整数在内存中的二进制位进行操作。
- 位运算符
- ~n: 按位取反,运算的规律:0 -> 1, 1 -> 0。
记住公式:n的按位取反结果是: -(n + 1)。
~3计算过程,先将3转换为二进制0011,再进行位运算 - &: 按位与,运算的规律:有0即0。
- |:按位或,运算的规律:有1即1。
- ^:按位异或,运算的规律:同0异1。常常用来交换两个变量的值。
- m << n: 按位左位移,将m向左移动n位,运算的规律:右边补0,相当于* 2 ^ n 次方,有溢出风险。
- m >> n: 按位右位移,运算的规律:如果m是正数,左边补0,是负数就补1 相当于/ 2 ^ n 次方。
- ~n: 按位取反,运算的规律:0 -> 1, 1 -> 0。