Java基础 Day03
总结
- 数据类型
- 数据类型之间的转换
- 自动转换:小转大
- 强制转换:大转小
- 可能有损失
- 整型之间转换的损失:仅截取指定的2进制位数
- 浮点型转整型的损失:小数点之后的内容损失
- 可能有损失
- Java的内存
- 运算符
- 算数运算符
- 赋值运算符
- 关系运算符
- 逻辑运算符
数据类型
Java是一门强数据类型的语言。
- 当声明一个变量时,必须指定变量的数据类型
- 变量的类型一旦被声明,则不可改变,只能将变量的值转换成其他数据类型,赋值给新的变量
1. 基本数据类型
四类(整型、浮点型、字符型、布尔型)八种
-
整型(4种)
- byte 字节型 1字节 -128~127 -27~27-1
- short 短整型 2字节 -215~215-1 -32768~32767
- int 整型 4字节 -231~231-1
- long 长整型 8字节 -263~263-1
- 注意:
- 整数直接量默认是使用int类型来存储,最常用的整型也是int类型;
- 可以指定使用long类型来存储直接量,在直接量后边添加L或者l后缀,指定了使用long类型来存储该直接量;
- 整型的数据存储方式:
- 底层的二进制采用补码形式保存
- 原码:
- 在数字二进制的基础上添加符号位,符号位为数字最高位(最左侧1位)为符号位,0表示正数,1表示负数
- 例如:5(10)=101(2),-5(10)=1101(2)
- 反码:
- 正数的反码与原码相同,负数的反码除符号位外逐位取反
- 如:原码10010(这是负数)= 反码11101
- 补码:
- 正数的补码与原码相同,负数的补码是在其反码的基础上末位加1
- 如:原码10010(这是负数)= 反码11101=补码11110
-
浮点型(2种)
- float 单精度浮点型 4字节
- double 双精度浮点型 8字节
- 注意:
- 浮点数直接量默认是使用double类型来存储;
- 可以指定使用float类型来存储浮点数直接量,在浮点数直接量后边添加F或者f后缀,指定了使用float类型来存储该直接量;
- 最常用的整型是double类型;
- double类型也可以在直接量后边加D或d来明确;
- float和double都可能存在精度的缺失
-
字符型(1种 )
- char 字符型 2字节
-
布尔型(1种)
- boolean 布尔型 1字节
- 只有true和false两个值
- boolean 布尔型 1字节
2. 引用数据类型(复杂数据类型)
类 接口 数组 枚举等
注意:
- 字符串类型不是基本数据类型,是引用数据类型
- 除了8种基本数据类型以外,其他都是引用类型
- 八种基本数据类型都是关键字全部小写
- 关于数据类型的面试题,一定要注意回答的逻辑性、条理性
数据类型的转换
1. 自动数据类型转换
- 数值型
- 从小到大自动转换
- byte-·> short -> int -> long -> float -> double
- 整型 -》浮点型 在整数值后直接加.0
- 字符转数值型
- char->int->long->float->double
- 根据码表将字符对应的ASCII值赋值给int类型
2. 强制数据类型转换
从大转小,且大类型实际存储的数据是在小类型的范围之内的;
- 格式:(type)数据值;
- 将数据值强制转换为小括号中的数据类型
注意:
- 浮点型转整型则小数部分全部舍弃;精度损失
- 整型大转小进行强制类型转换,底层做法从最低位开始获取强转为的类型对应的字节数
- 数据类型的转换同样适用于引用数据类型
Java内存
- 内存:
- 内存的数据读写速度快:DDR4单通道内存,速度约22GB/S
- 无法持久化保存数据:断电则数据丢失
- 一个程序启动后,操作系统会为该程序分配指定的内存空间,该程序运行中的所有临时数据,都保存在被分配到的内存空间中。当程序关闭时,操作系统会回收这部分内存空间,其中的数据会丢失。
- 硬盘:
- 可以持久化的保存数据,关闭电源再重启,数据依旧存在
- 数据读取速度远低于内存:机械硬盘读速度约150MB/s,固态硬盘读速度 600MB/s~1GB/s
- 执行Java程序:
- 程序运行起来实际是在内存中作为运算
- 从内存的角度来说,可以将变量称为存储数据的最小的容器;
- 当程序开始运行,会分配相应的内存空间用于执行程序,当程序执行完成,所占用的内存空间会立马释放;
运算符
算术运算符 赋值运算符 关系运算符 逻辑运算符 三目运算符(三元表达式) 位运算符
算术运算符
-
基本算术运算符:+ - * / %
-
二元运算符
-
+:
- 数值型之间可以直接进行求和运算
- 整形+整形=整形
- 整形+浮点型=浮点型
- 字符串拼接
- +号遇到字符串,则会将字符串和其他数据类型的内容拼接起来,产生一个新的字符串;
- 从左向右依次执行
- 数值型之间可以直接进行求和运算
-
数据类型的问题:
-
两个元素的数据类型一致,结果和元素保持一致;
-
两个元素的数据类型不一致,结果的数据类型和其中大的数据类型保持一致;
-
整形和浮点型的运算结果是浮点型
-
注意:
-
byte short char在运算时会自动提升为int类型
byte b3=b1+b2; // 错误
-
-
/:
- 整型/整型结果为整型(整除),直接舍弃小数部分
- 运行时异常:除数不能为0
- 如果被除数或除数为浮点型,则结果为浮点型
- 正浮点数/0:Infinity(无穷大)
- 负浮点数/0:-Infinity(无穷小)
- 0.0/0:NaN(Not a Number)非数字
-
%:模 余
-
-
扩展的算术运算符:++ –
-
++:自增运算符
-
–:自减运算符
-
是2个一元运算,用于变量的自增1和自减1
-
注意:
-
++ – 作用于变量,不能作用值和常量
-
++ 可以在变量的前边也可以在变量的后边
-
当++参与运算,++在前在后有区别:
-
如果++在变量的后边,先使用变量原来的值,之后再让变量+1;
- 如果++在变量的前边,先让变量+1,之后再使用变量的值;
-
– 同理;
-
-
赋值运算符
格式: 变量名 = 值
-
注意:
- = 基本赋值运算符 没有比较的含义
- 优先级是最低的:先执行等号右边的所有运算,最后再将结果赋值给等号左边的变量
-
扩展的赋值运算符: += -= *= /= %=
- 变量 += 值或变量; i+=10;
- 等同于 变量=变量+值或变量; i=i+10;
- 运算规则:使用左侧变量的值和右侧的值进行求和将结果重新赋值给左侧变量;
关系运算符
-
包括:>(大于) >=(大于等于) <(小于) <=(小于等于) == (等于) !=(不等于)
-
属于2元运算符
-
结果一定是boolean,要么为true 要么为false
注意:
- 不支持比较运算符的连用
(18< a1 <33)
逻辑运算符
针对boolean做运算,运算结果也是boolean类型
-
& 且
-
元素1 & 元素2:
true&true=true
true&false=false
false&true=false
false&false=false
-
总结:有false则为false,全true为true
-
-
| 或
-
元素1 | 元素2:
true | true=true
true | false=true
false | true=true
false | false=false
-
总结:有true则true,全false为false
-
-
! 非
!true == false
!false == true
-
^ 异或
-
相异为true,相同为false
-
true^true=false
-
true^false=true
-
false^false=false
-
-
&& 双与 短路与
- 如果&&左边的值为false,则右边不再计算,结果必然为false;
- 换一种理解思路:只有当左边的条件符合时,才会继续进行右边的判断
- if(str!=null && str.length!=0 )
- 注意:& 和&&最终的结果一定是一致的;
-
|| 双或 短路或
- 如果||左边的值为true,则右边不再计算,结果必然为true;
-
注意: | 和||最终的结果一定是一致的;
-
&& ||的优点:可以提高程序的执行效率