献给小白的笔记day2
1.1 基本数据类型转换
自动类型转换(隐式类型转换)
- 从取值范围较小的数据类型转换为取值范围较大的数据类型
取值范围校的数据类型可以自动转换为取值范围大的,隐式转换 - 从取值范围小的数据类型转换为取值范围大的数据类型,可以自动提升,且隐式转换
- 基本数据类型取值范围顺序
- byte<short<int<long<float<double
- char<int<long<float<double
- 基本数据类型取值范围从小到大的顺序
- byte < short < int < long < float < double
- char < int < long < float < double
强制类型转换(显式类型转换)
-
从取值范围较大的数据类型转换为取值范围较小的数据类型
显示转换,取值范围大的转换为小的,取值大的前面加上强制转换符号 -
从取值范围大的数据类型转换为取值范围小的数据类
-
必须使用强制转换,为显式转换,具体格式如下
-
取值小数据类型 变量名=(取值小数据类型) 取值范围大的数据类型值;
-
强制类型转换有可能出现精度受损,一般不推荐使用
-
格式:
取值范围较小的数据类型 变量名 = (取值范围较小的数据类型)取值范围较大的数据类型的数据值;
类型转换的注意事项:
因为jvm虚拟机默认整数类型的数据为int型,所以在byte和short初始化的时候,隐式默认的将初始化值进行对应初始化类型的强制转换,且byte和short及char类型的数据进行运算时,自动提升为int类型
boolean 不可以作为类型转换
byte和short在初始化取值范围内时,jvm自动给他做了一步强制类型转换,
因为java虚拟机运算时一般默认数据类型为int类型,byte,short,char只要参与运算,自动转换为int类型
boolean类型不可以作类型转换,如果byte和short初始化的值在取值范围内,jvm自动隐式强制转换,但若超过取值范围,编译不通过,若必须初始化,记得显式加强制转换
- 因为在类型转换的时候,会出现精度的丢失,一般不推荐使用强制类型转换
- byte 和 short 在其初始化值是其取值范围内的时候,JVM自动给其做一步强制类型转换
- byte 、short、 char 这三种数据类型只要参与运算操作,直接提升成int类型
- boolean类型不可以参与类型转换
1.2 运算符
- 运算符:在程序中,用来连接常量或者变量的符号
- 运算符:在程序中,用来连接常量或变量的符号
- 表达式:在程序中,用运算符连接起来的式子
- 表达式:在程序中.用运算符连接的式子
- 分类:
- 算术运算符±*/
- 算术运算符:±*/
- 赋值运算符+=-=*=/=%=
- 赋值运算符:+=-=*=/=%=
- 关系运算符
- <><=>=!===
- 关系运算符
- 逻辑运算符&|^~&&||
- &|!^&&||
- 三元运算符表达式1关系运算符表达式2?1:2
- 三元运算符 表达式1关系运算符表达式2?表达式1:表达式2
- 位运算符
- <<>>左右移位
算术运算符
- 加法符号多种用途
- 加号的多种用途,1 对有字符串出现的数据进行拼接 2 做运算加法使用
- 加法
- 连接:+号两边有任何一边出现了字符串,+号就不在是加法的意思了,而起到了连接的作用
- 除号和取余号区别
- 除号和取余号区别
- /是两个数相除的商
- %是两个数相除的余
- / :两个数相除的商
- %:两个数相除的余数
- ++ –
- +±-单独使用时,作用一样,一旦进行复合使用,前++是先自增后进行复合的运算,后++是先进行运算在自增
- 前–是先自减后进行复合的运算,后–是先进行运算在自减
- 单独使用:前++和后++ 结果是一样的
- 复合使用:
- ++在前:先自增,后运算
- ++在后:先运算,后自增
赋值运算符
- 基本赋值运算符:=
- 基本赋值运算符 =
- 扩展赋值运算符:
- 将赋值运算符左边的数据和右边的数据运算操作,将最后的赋值给左边的变量
- 将符号的左边的数据和右边的数据做运算操作,将最后的结果赋值给左边的变量
- 在将最后的结果赋值给左边的变量时,隐含做了一步强制类型转换
关系运算符(比较运算符)
- 关系表达式的结果一定是boolean
- 关系运算符,表达式结果一定boolean型
- 进行两个数据相等时,千万不要把==写成=
- 在进行两个基本数据类型比较是否相等时,千万不要将==写成=
逻辑运算符
- &(与,且):有false则false 有false就是false
- &(与,且);youfalse则false,逻辑运算符两边都会被执行
- |(或):有true则true 有true就是true
- |(或):有true则true 两边的表达式都会被执行
- ^(异或):相同为false,不同为true ^异或 相同就是false 不同就是true
- ^(异或):两侧表达式相同则为false,不同则为true
- !(非):非true则false,非false则true 单独使用,用在false前就变成true,用在true前就是false
- !,此逻辑运算符单独使用,非true则false,非false则true
- &&(双与,短路与)
- &&和&结果是一样的,&&具有短路效果,当符号的前面为false的时候,符号后面不会被执行;& 无论前面的结果是什么,后面都会执行
- && (短路与),与单&结果相同,但是短路与,一旦表达式1执行为false,就不再会执行表达式2,这样有利于提高效率
- ||(双或,短路或)短路作用,前面为false时,后面不会被执行
- ||和|结果是一样的,||具有短路效果,当符号的前面为true的时候,符号后面不会被执行;| 无论前面的结果是什么,后面都会执行
- || (短路或),与单|结果相同,但是短路或,一旦表达式1执行为true,就不再会执行表达式2,这样有利于提高效率短路作用,前面为true时,后面不会被执行
三元运算符(三目运算符)
-
格式
数据类型 变量名 = 关系表达式? 结果1 : 结果2; ```数据类型 变量名=关系表达式?结果1:结果2 数据类型 变量名=表达式1 关系运算符 表达式2?结果1:结果2
-
执行流程
-
执行流程,关系运算符判断是false则执行结果2,true执行结果1
-
先看关系表达式的值,是true还是false
-
如果是true执行的是结果1,如果是false执行的是结果2
先看关系表达式是true还是false,true执行结果1,false执行结果2