Java语法基础-动手动脑问题整理

从"意外输出"开始——Java第一课动手实践小结

苏中昊 信2505-1班 20253871

这一周 Java 课最深的感受是:书上的结论看似简单,亲手跑一遍代码,才会撞见真正的"意外"。

第一个意外来自枚举。运行 EnumTest.java 后我才明白,枚举不是简单的基本类型,而是引用类型:相同的枚举值引用同一个对象,所以用"=="和 equals() 比较结果完全一致。

第二个意外藏在位运算里。查阅资料弄清原码、反码、补码之后,我编写程序对正负数做各种位操作,把输出与手工推算逐条比对,最终确认:Java 中的整数是用补码存储的。

第三个意外是变量的"遮蔽"。在不同作用域里定义同名变量,程序输出的永远是当前作用域里最内层的那一个——同名变量的屏蔽原则由此得证。

第四个意外最经典。TestDouble.java 的输出与数学直觉相悖:double 运算并不精确。根源在于十进制小数转成二进制时常是无限循环,只能近似表示。解决方案是用 BigDecimal,且构造时必须传入字符串,否则精度问题依旧。

类似的还有类型转换:小类型转大类型安全无损失,大转小就可能出事,double 强转 float 后变成 1.23456794E9 便是明证。

最后一个"陷阱"来自一行简单代码:"X+Y="+X+Y 打印出 X+Y=100200,而 X+Y+"=X+Y" 打印出 300=X+Y。加减运算自左向右,遇到字符串就变成拼接,先后顺序决定了结果。

回看这些练习,答案其实都在"动手"与"动脑"的结合点上。看懂了不算会,跑通并能解释为什么,才算真正掌握。

posted on 2026-10-07 23:28  刘毛  阅读(4)  评论(0)    收藏  举报