
HoRain云小助手个人主页 个人专栏: 《Linux 系列教程》《c语言教程》⛺️生活的理想就是为了理想的生活!⛳️ 推荐前些天发现了一个超棒的服务器购买网站性价比超高大内存超划算忍不住分享一下给大家。点击跳转到网站。专栏介绍专栏名称专栏介绍《C语言》本专栏主要撰写C干货内容和编程技巧让大家从底层了解C把更多的知识由抽象到简单通俗易懂。《网络协议》本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘一起解密网络协议在运行中协议的基本运行机制《docker容器精解篇》全面深入解析 docker 容器从基础到进阶涵盖原理、操作、实践案例助您精通 docker。《linux系列》本专栏主要撰写Linux干货内容从基础到进阶知识由抽象到简单通俗易懂帮你从新手小白到扫地僧。《python 系列》本专栏着重撰写Python相关的干货内容与编程技巧助力大家从底层去认识Python将更多复杂的知识由抽象转化为简单易懂的内容。《试题库》本专栏主要是发布一些考试和练习题库涵盖软考、HCIE、HRCE、CCNA等目录⛳️ 推荐专栏介绍一、Number 类为什么需要它核心抽象方法所有子类必须实现典型子类要点二、Math 类常用方法速查Math vs StrictMath三、两者关系 选型建议Java 里的Number 和Math 都位于java.lang包是数值处理的两大基础但定位完全不同——一个管数值类型的抽象与装箱一个管数学运算工具。一、Number 类java.lang.Number是一个抽象类是所有数值包装类Integer、Long、Double、Float、Byte、Short以及BigDecimal、BigInteger的父类。为什么需要它Java 8 种基本类型里数值类有 6 个byte/short/int/long/float/double它们不是对象不能放进集合、不能调方法。Number 给它们套了一层父类让数值也能当对象用即装箱。// 子类举例 Integer i 10; // extends Number Double d 3.14; // extends Number BigDecimal bd new BigDecimal(1.23); // extends Number核心抽象方法所有子类必须实现int intValue(); long longValue(); float floatValue(); double doubleValue(); byte byteValue(); // 默认转 int 再强转 short shortValue(); // 默认转 int 再强转用途在不同数值类型之间转换可能丢精度。Double d 3.99; int x d.intValue(); // 3直接截断不是四舍五入典型子类要点包装类缓存范围备注Integer-128 ~ 127valueOf()走缓存Long-128 ~ 127同上Byte全量缓存就 256 个Float/Double无缓存valueOf()直接 newInteger a 127; Integer b 127; System.out.println(a b); // true缓存 Integer c 128; Integer d 128; System.out.println(c d); // falsenew 出来的 System.out.println(c.equals(d)); // true比值推荐 包装类比较值永远用equals别用。二、Math 类java.lang.Math是final 工具类构造器 private所有方法都是static拿来即用不用 new。public final class Math { private Math() {} // 防实例化 }常用方法速查基础运算Math.abs(-5); // 5绝对值 Math.max(3, 7); // 7 Math.min(3, 7); // 3 Math.pow(2, 10); // 1024.0返回 double Math.sqrt(9); // 3.0取整三兄弟最容易混Math.ceil(3.2); // 4.0 天花板向上 Math.floor(3.8); // 3.0 地板向下 Math.round(3.5); // 4 四舍五入本质是 floor(x0.5) Math.round(-3.5); // -3 ⚠️ 不是 -4随机数Math.random(); // [0.0, 1.0) 的 double // 想要 [0, 10) 的整数 int n (int)(Math.random() * 10);生产代码更推荐ThreadLocalRandom或RandomMath.random()内部同步并发性能一般。其他Math.signum(-5); // -1.0符号函数 Math.hypot(3, 4); // 5.0√(x²y²)防溢出写法 Math.log(10); // 自然对数 Math.PI; // π Math.E; // 自然常数Math vs StrictMathMath某些方法允许 JVM 用平台最优实现如 x87 / SSE2更快但跨平台结果可能差最后一个 bitStrictMath严格保证逐 bit 可移植性能略差绝大多数场景用Math就够了。三、两者关系 选型建议Number当你需要把数值当对象——放集合、泛型、OptionalInteger、JSON 序列化 → 用包装类Math做计算、取整、随机数 → 直接Math.xxx()高精度钱、金融→BigDecimal也是 Number 子类别用double算钱// 反例 System.out.println(0.1 0.2); // 0.30000000000000004 ❌ // 正解 BigDecimal a new BigDecimal(0.1); BigDecimal b new BigDecimal(0.2); System.out.println(a.add(b)); // 0.3 ✅要不要我接着展开BigDecimal的坑scale / roundingMode / 构造器传 double 的陷阱或者包装类自动拆装箱在集合里的真实表现❤️❤️❤️本人水平有限如有纰漏欢迎各位大佬评论批评指正如果觉得这篇文对你有帮助的话也请给个点赞、收藏下吧非常感谢! Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧