动手动脑与实验性问题总结
动手动脑1运行结果分析以及结论
枚举常量每个值引用唯一的特定对象,SMALL 和 LARGE 是不同的对象。枚举类型是引用类型,不是原始数据类型
根据字符串返回对应的枚举常量u是Size.SMALL,和s是同一个对象。
每个枚举常量是唯一的可以直接用 == 比较 枚举是引用类型,不是原始数据类型。可以通过字符串名称获取对应的枚举常量
动手动脑2
对正数负数进行各种位操作 java表示的结果与手工计算结果来看,java的负数右移运算与手工计算有差别,查询之后知道
手工计算的8位与java计算的32位计算结果有误java计算结果是正确的.Java中的输由补码表示.
动手动脑3
成员变量 局部变量:局部变量或方法参数可以屏蔽成员变量,但需要用 this 访问成员变量。
局部变量作用域:在同一个方法内,不能在嵌套代码块(如 if、for)中重新定义同名局部变量。
尽量使用不同的变量名,或明确用 this 区分成员变量。
动手动脑4
无精度损失的自动转换 范围依次扩大(byte 8位→short 16位→int 32位→long 64位),小范围类型转大范围类型时,数值完全能被容纳,无精度损失
char 是 16 位无符号类型,而 int 是 32 位有符号类型,char 的所有值都能被 int 完全容纳(int 范围远大于 char)。
float→double同为浮点数小范围到大范围没有精度损失
有精度损失的自动转换
int→float float尾数位无法容纳所有整数位,会丢失精度
int→double 如果int 的数特别大也会与float的理由相同 丢失精度
long → double long的范围远大于double的精确整数范围,所以会丢失精度
动手实验
运行结果0.05 + 0.01 = 0.0600000000000000051.0-0.42 = 0.58000000000000014.015 *100 = 401.49999999999994123.3/100= 1.2329999999999999
说明使用double类型的数值进行计算, 其结果是不精确的。
double 使用 64位 存储,分为三部分:
符号位(1位):表示正负。
指数位(11位):决定数值的范围。
尾数位(52位):决定数值的精度(有效数字)。
有限位数存储double只有 52位尾数,超出部分会被截断或舍入。
二进制无法精确表示某些十进制小数:例如,0.1 在二进制中是无限循环小数(类似十进制的 1/3 = 0.333...),存储时会丢失精度。
如果用double定义BigDecimal仍有可能精度损失因为double本来就有精度损失
动手动脑5
运算结果
X+Y=100200
300=X+Y
第一个输出 两个+都是字符串拼接
第二个输出 第一个是数值加法 第二个是字符串拼接