JavaBasis
0、数据类型
1) 基本数据类型
基本数据类型也称为原生类,分为四类八种
a、整形(4种)
① byte :字节型,占用1个字节,取值范围为 :-128~127
② short :短整型,占用2个字节,取值范围为 :-215~215-1 = 65535
③ int :整型,占用4个字节,取值范围为 :-231~231-1
④ long :长整型,占用8个字节,取值范围为 :-263~263-1
注意 :① 整型字面值默认是 int 类型来存储;如果整数字面值超过了 int 类型的取值范围,编译会报错;
② 如果需要制定使用 long 类型来存储该整数字面值,需要在其后边加 l 或 L 后缀;
③ int类型为最常用的整数类型;
b、浮点型(2种)
① float :单精度浮点型,占用4个字节
② double :双精度浮点数,占用8个字节
注意 :① 浮点数字面值默认类型为 double,如果想要使用 float 类型来存储浮点数字面值,则需要在其后边添加 f 或 F 后缀;
② double 类型为最常用的浮点类型,double 类型可在字面值后边添加 D 或 d ,也可以省略;
③ 浮点型存储数据可能存在精度损失;
④ 存储科学计数法字面值必须为 double 类型,eg :double d = 3e5; 相当于 3 * 105 = 300000.0;
c、字符型(1种)
char :字符型,占用2个字节,取值范围为 :0~65535
注意 :在一定范围内,字符型变量也可以通过 int 类型的整数来赋值;
d、布尔型(1种)
boolean :布尔型,占用1个字节
注意 :① 布尔型的值只能为 true 或 false;
②true 的哈希码为 1231; false 的哈希码为 1237;
2) 引用数据类型
类、接口、数组
1、数据类型转换问题
1) 自动数据类型转换
a、数值型 :从小到大
整型 :byte —> short —> int —> long
浮点型 :float —> double
整型 --> 浮点型 :byte --> short --> int --> long -->float -->double
转换过程中可能存在精度损失
b、字符型 :
char --> int --> long --> float --> double
char 字符型会根据码表将字符对应的整数编号(ASCII值)转为 int 类型
2) 强制数据类型转换
数据类型 :从大到小
格式 :(type)数据; —> 将数据的类型强制转换为小括号内的类型
注意 :① 浮点数强制转换为整数时,存在精度损失,无论小数部分有多大,都直接舍弃;
② 布尔类型无法通过强制转换为数值型,否则编译报错
③ 当大的数据类型的值超过了小的数据类型的取值范围时,从最低位开始拿取最低位数的二进制
例题 :如下代码哪些存在错误
byte b1 = 127; //第一行
int i = 127;//第二行
byte b2 = i; //第三行
解析 :
第三行存在编译报错,其他的正确
原因 :
第一行 :127 为 int 类型,存在 int --> byte,但是由于编译检查,在编译第一行代码时,程序会检查 127 是否在 byte 类型的取值范围内,若存在,这编译通过;如果超出范围,则需要强制类型转换,int 强转为 byte,否则编译报错;
第二行 :127 在 int 范围内,通过;
第三行 :编译检查时,因为程序不能确定变量 i 的具体值,所以编译报错;
2、Java运算符(一)
1) 概述 : java中内置的表示特定运算规则的符号
2) 分类 :
① 算术运算符 :+ - * /(整除) %(求余) ++ –
注意 : a、运算结果的数据类型
① 当两个元素数据类型一致,结果的数据类型和元素保持一致;
② 当两个元素数据类型不一致,结果的数据类型和其中大的数据类型保存一致;
③ 其中 byte short char 类型参与运算时,会自动提升为 int 类型
eg :byte b1 = 3;
byte b2 = 4;
byte b3 = b1 + b2; //编译时会报错,byte 类型参与运算时,会自动提升为 int 类型,赋值给 byte 类型需要强转
byte b4 = 3 + 4; //不会报错,且正常运行;原因 :在编译检查时,程序会将字面值 3 和 4 进行运算,检查其结果在不在 byte 范围内,如果在,则编译通过;否则编译报错;
b、当使用除法( / )时,
① 当 int 类型 / int 类型时,结果为 int 类型,直接舍弃小数部分,达到取整效果
② 当 int 类型 / 0 时,除数为 0,编译不报错,运行报错(也称运行时异常)
异常信息 :java.lang.ArithmeticException:/by zero (算术异常 :除 0 操作)
③ 当 正浮点数 / 0 : Infinity(无穷大)
④ 当 负浮点数 / 0 : -Infinity(无穷小)
⑤ 0.0 / 0 : NaN(Not a number 非数字)