今日内容介绍
数据类型转换
运算符
数据类型转换
1.1 自动类型转换【从小到大自动】
Java程序中要求参与的计算的数据,必须要保证数据类型的一致性,如果数据类型不一致将发生类型的转换。
举例:
int + int --> int 两个int类型数据进行运算,数据类型一致可以直接进行运算,结果也是int类型
int + long --> long + long --> long
一个int和一个long进行运算,数据类型不一致,必须转换成一致的才可以运算
解决方案: 把左侧的int类型转换成long类型,是从小到大,java自动完成(自动类型转换)
int + long --> int + int --> int
一个int和一个long进行运算,数据类型不一致,必须转换成一致的才可以运算
解决方案: 把右侧的long类型转换成int类型,是从大到小,java不会自动完成(强制类型转换)
1.自动类型转换概念:
取值范围小的数据或者变量,可以直接赋值给取值范围大的变量
2.特点:
(1)是自动完成的,不需要代码进行特殊处理
(2)byte/short/char,只要参加运算会自动转换成int类型
(3)转换的方向:
byte、short、char–>int–>long–>float–>double
举例:00000000
有一个byte类型(1个字节)的数字5: 00000101
byte类型自动类型转换成short类型(2个字节):
在左侧补充1个字节的0,因为补充的都是0,对原有数据大小没有影响,仍然是5
00000000 00000101
byte类型自动类型转换成int类型(4个字节):
在左侧补充3个字节的0,因为补充的都是0,对原有数据大小没有影响,仍然是5
00000000 00000000 00000000 00000101
byte类型自动类型转换成long类型(8个字节):
在左侧补充7个字节的0,因为补充的都是0,对原有数据大小没有影响,仍然是5
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000101
总结:
根据需求在数字的左侧补充若干个字节的0,因为补充的都是0,对原有数据大小没有影响
1.2 强制类型转换【从大到小强制】
1.强制类型转换概念:
取值范围大的数据或者变量,不能直接赋值给取值范围小的变量,
必须进行强制类型转换(大萝卜不能直接放入小坑当中)
int数字571: 00000000 00000000 00000010 00111011
强制类型转换成byte类型: 00111011 --> 59
损失了原有数据的大小
int num = 571;
byte a = (byte)num;
2.格式:
转后类型 变量名称 = (转后类型)转前数据或者变量
3.问题:
可能会损失精度
举例:00000000
有一个long类型(8个字节)的数字5:
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000101
00000000 00000000 00000000 00000010 00000000 00000000 00000000 00000101
long类型强制类型转换成int类型(4个字节):
砍掉左侧的4个字节的0,因为砍掉的都是0,对于原有数据大小没有影响,仍然是5
00000000 00000000 00000000 00000101
long类型强制类型转换成short类型(2个字节):
砍掉左侧的6个字节的0,因为砍掉的都是0,对于原有数据大小没有影响,仍然是5
00000000 00000101
long类型强制类型转换成byte类型(1个字节):
砍掉左侧的7个字节的0,因为砍掉的都是0,对于原有数据大小没有影响,仍然是5
00000101
总结:
根据需求,砍掉左侧的若干字节的内容,如果砍掉的都是0,对原有数据没有影响
只要砍掉的数据中包含1,将对原有数据产生影响
1.3 ASCII码表
计算机是一个二货,只能存储0和1,所以存储到计算机中的所有内容都会转换成0和1进行存储
所以我们在计算机中存储的字符也不例外,也需要把字符转换成0和1进行存储
问题: 如何把字符转换成对应的0和1进行存储呢?
解决方案:
编码表:就是将人类的文字和一个十进制数进行对应起来组成一张表格。
存储字符时:需要查找ASC码表,找到字符对应的数字,将数字转换为二进制数存放到计算机中
‘a’ --> 97 --> 1100001 26个小写字母的ASCII码值是连续滴
‘A’ --> 65 --> 1000001 26个大写字母的ASCII码值是连续滴
‘0’ --> 48 --> 110000 数字字符的ASCII码值是连续滴
使用字符时:将对应的二进制数转换为十进制 找到ASC表中对应的字符 显示出来
1100001 --> 97 --> ‘a’
1000001 --> 65 --> ‘A’
110000 --> 48 --> ‘0’
总结:
大小写字母之间的ASCII码值相差32
(char)(大写字母 + 32) --> 得到对应的小写字母
(char)(小写字母 - 32) --> 得到对应的大写字母
1.4 int类型和char类型的运算原理
第三章 运算符
2.1 算术运算符加减乘除
1.运算符:对常量或者变量进行操作/运算的符号
2.表达式:用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式。
3.数学运算符:
(1)+: 加法运算
(2)-: 减法运算
(3)*: 乘法运算
(4)/: 除法运算
被除数 ÷ 除数 = 商(/: 获取除法运算中的商) … 余数(%: 获取除法运算中的余数)
2.1.1 算术运算符%
%运算符(取余数运算符)
%的作用:
1.判断数字的奇偶性
偶数(可以被2整除): 数字%2 的 结果是0
奇数(不可以被2整除): 数字%2 的 结果不是0 ==> 结果是1
2.判断一个数字能否被另外一个数字整除
结果为0: 说明可以被整除
结果不为0: 说明不可以被整除
%运算符(取余数运算符)
%的作用:
1.判断数字的奇偶性
偶数(可以被2整除): 数字%2 的 结果是0
奇数(不可以被2整除): 数字%2 的 结果不是0 ==> 结果是1
2.判断一个数字能否被另外一个数字整除
结果为0: 说明可以被整除
结果不为0: 说明不可以被整除
注意:
/和%都是用来完成数学中的除法运算,只不过/获取的是除法运算中的商
%获取的是除法运算中的余数
扩展:
利用/和%获取一个int变量num中存储的四位数字(1234)的个位,十位,百位,千位
个位: 4
十位: 3
百位: 2
千位: 1
2.1.2 算术运算符+的特殊用法
+的作用
1.完成数学中的加法运算
2.完成字符串的连接(拼接): 如果+的左右两边出现字符串
2.2 赋值运算符
= 赋值 a=10,将10赋值给变量a
+= 加后赋值 a+=b,将a+b的值给a a = a + b
-= 减后赋值 a-=b,将a-b的值给a a = a - b
= 乘后赋值 a=b,将a×b的值给a a = a * b
/= 除后赋值 a/=b,将a÷b的商给a a = a / b
%= 取余后赋值 a%=b,将a÷b的余数给a a = a % b
注意:
1.=: 表示的是赋值运算
2.==: 表示的是判断是否相同
2.2.1 赋值运算符的特点
赋值运算符的特点
1.+=,-=,*=,/=,%= 运算符,如果运算后的结果的类型和左侧变量的类型不一致,
内部会进行隐藏的强制类型转换
2.整数常量只要没有超出所赋值变量的范围,可以直接进行赋值,
内部会进行隐藏的强制类型转换
2.3 自增自减运算符
自增(++)自减(–)运算符
1.作用: 就是让变量的值增加(++)1或者减少(–)1
2.使用格式:
(1)可以写在变量的前面: ++a,–a
(2)可以写在变量的后面: a++,a–
3.使用特点:
(1)单独使用: ++/-- 自己成为一行,没有和额外的其它操作(赋值/打印…)一起运算
前++/后++: 没有任何区别,都是让变量的值增加1
前–/后–: 没有任何区别,都是让变量的值减少1
(2)混合使用: ++/-- 和额外的其它操作(赋值/打印…)一起运算
前++/前–【先++、–,然后使用】:
先把变量的值增加(++)或减少(–)1, 然后再使用变量增加/减少1之后的结果进行其它运算
后++/后–【先使用,然后++、–】:
先使用变量增加(++)或减少(–)1之前的数据,然后再把变量的值增加(++)或减少(–)1
以后最常用的:
a++: 表示a的值增加1
a–: 表示a的值减少1
2.4 关系运算符
1.作用:
用来比较两个数据之间的大小关系,结果是boolean类型的数据
2.特点:
关系表达式不管写的多么复杂,或者多么简单,最终结果要么是true(成立),要么是false(不成立)
3.分类:
== 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
4.注意:
1.=: 表示的是赋值运算
2.==: 表示的是判断是否相同
2.5 逻辑运算符
1.作用:
用来连接多个布尔表达式的,结果也是布尔类型
2.分类:
(1)逻辑与(&:shift+7)【有false,则false】:
表示并且的意思,同时成立的意思
多个条件都为true,结果才为true
多个条件只要有一个为false,结果就是false
(2)逻辑或(|:shift+)【有true,则true】:
表示或者的意思
多个条件只要有一个为true,结果就是true
多个条件都是false,结果就是false
(3)逻辑异或(^:shift+6):
相同为false,不同为true
(4)逻辑非(!:shift+1):
!true: 就是false
!false: 就是true
2.5.1 逻辑运算符的短路效果
逻辑运算符的短路效果
1.基本使用
(1)短路逻辑与(&&): 左侧为false,右侧不进行计算
(2)短路逻辑或(||): 左侧为true,右侧不进行计算
2.使用区别):
(1)&&和&: 最终的结果是相同的,但是&&具有短路的效果,效率高
(2)||和|: 最终的结果是相同的,但是||具有短路的效果,效率高
3注意:
以后实际学习/开发过程中,需要连接多个条件时,强烈建议使用&& 或者 ||
2.6 三元运算符格式
1.格式:
数据类型 变量名称 = 布尔表达式1 ? 表达式2 : 表达式3;
注意:
?号前面的式子的结果必须是布尔类型
2.执行流程:
(1)计算布尔表达式1的结果,看是true,还是false
(2)如果布尔表达式1的结果是true,取表达式2的结果赋值给左侧的变量
(3)如果布尔表达式1的结果是false,取表达式3的结果赋值给左侧的变量