ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

数据类型拓展

2026/8/13 8:16:31 拓冰建站 浏览量
数据类型拓展 数据类型拓展整数拓展进制二进制0b八进制0十进制 十六进制0xpublic class demo1{ public static void main(String[] args){ int i0b10; //二进制 int i2010; //八进制 int i36; //十进制 int i40x10; //十六进制 System.out.println(i); System.out.println(i2); System.out.println(i3); System.out.println(i4); } }答案2 8 6 16浮点数拓展问题一public class demo1{ public static void main(String[] args){ float f 0.1f; //0.1 double d 1.0/10; //0.1 System.out.println(fd); System.out.println(f); System.out.println(d); } }答案false 0.1 0.1false的原因float 和 double 都是二进制浮点数0.1 无法在二进制里精确表示并且 float(32位)、double(64位) 存储的近似值不一样。1.先搞懂 0.1 的二进制问题十进制0.1转二进制是无限循环小数0.00011001100110011……计算机存储空间有限只能截断保存近似值。float f 0.1f32 位单精度截断精度低保存一个近似值 Adouble d 1.0/1064 位双精度位数更多保存另一个近似值 BA ≠ B2.f d发生了什么Java 中比较不同浮点类型时会先把 float 自动提升为 double 把float的近似值 A 转成 double得到的新 double 值 ≠ 原本变量 d 里的近似值 B 所以结果为false。3. 为什么打印出来都显示 0.1System.out.println打印浮点数时不会输出完整的无限近似小数会自动做四舍五入简化展示看上去都是0.1但内存里真实存储的值并不相等。问题二public class Demo1{ public static void main(String[] args){ float f 23131312312312313f; float f1 f 1; System.out.println(ff1); } }答案truetrue的原因float 浮点数存在精度间隔数值太大时1 不足以跨越最小精度步长相加后值不变。1. float 的底层知识float是 32 位 IEEE754 浮点数符号位1bit指数位8bit尾数位23bit有效二进制精度大约只有24 位能精确表示的整数范围有限。当数字非常巨大时两个相邻可表示浮点数之间会存在间隔最小步进数值越大相邻两个 float 之间的间隔就越大。2. 套用到这段代码这个数字23131312312312313已经远远超出 float 能精细区分整数的范围。 此时相邻两个可以存下的 float 之间的差值 1也就是说 当前这个 f 所在位置float 最小能分辨的变化量不止 1。 你给它1变化太小达不到最低精度门槛计算机无法区分相加之后结果还是原来的值。 于是f和f1内存里存储的值完全一样比较结果为true。3. 举个通俗例子假设此刻 float 最小步长是100当前值10000你 1 → 10001 计算机只能存 10000、10100、10200…… 10001 没法保存只能就近舍入回 10000所以加 1 等于没加。float 和 doublefloat有限 离散 舍入误差 大约 接近但不等于double: 最好完全使用浮点数进行比较拓展银行业务可以用bigDecimal数学工具类字符拓展public class Demo1{ public static void main(String[] args){ char c1 A; char c2 中; System.out.println(c1); System.out.println((int)c1); //强制转换 System.out.println(c2); System.out.println((int)c2); //强制转换 } }答案A 97 中 20013所用的字符本质还是数字编码 Unicode 有一个表里面一一对应 2字节 0-65536U0000 UFFFFchar c3 \u0061; System.out.println(c3);答案a转义字符\t水平制表符相当于打Tab空出一段间隔\n换行符\双引号\单引号