java数据类型扩展
public class Demo01 {
public static void main(String[] args) {
// 二进制:0b开头;八进制:0开头;十六进制:ox开头
int decimal = 123;
int binary = 0b1111011;
int octal = 0173;
int hex = 0x7B;
System.out.println("十进制: " + decimal);
System.out.println("二进制: " + binary);
System.out.println("八进制: " + octal);
System.out.println("十六进制: " + hex);
System.out.println("======================================");
//❓为什么0.1f与1.0/10不相等
/*
- 十进制小数0.1(或1/10)无法被二进制精确表示,就像十进制无法精确表示1/3(结果是无限循环小数0.333...)一样。
- 二进制中,0.1是一个无限循环小数,由于计算机内存有限,浮点数只能存储这个无限序列的近似值。
- 0.1f和1.0/10虽然都近似表示0.1,但它们的精度不同:
- float f = 0.1f存储的是 32 位近似值。
- double d = 1.0/10存储的是 64 位近似值,精度更高。
*/
// 所以银行业务类不使用float与double类型,使用Bigdecimal数学工具类
float f = 0.1f;
double d = 1.0 / 10;
System.out.println(f == d);//输出为"false"
System.out.println("======================================");
//❓为什么float d1 = 13213135135131f与float d2 = d1+1相等?
/*
- 大数超出了float的精度范围(7 位有效数字)。
- 相邻浮点数的间隔过大(例如 2^43 数量级的间隔为 16384),导致微小增量(如 + 1)被舍入。
*/
float d1 = 13213135135131f;
float d2 = d1 + 1;
System.out.println(d1 == d2);//输出为"true"
System.out.println("======================================");
char c1 = 'a';
char c2 = '中';
System.out.println(c1);
System.out.println((int) c1);//强制转换
System.out.println(c2);
System.out.println((int) c2);//强制转换
//所有字符本质还是数字
//Unicode 为每个字符分配的唯一数字,范围从 U+0000 到 U+10FFFF
char c3 = '\u0061';
System.out.println(c3);
//转义字符,EX:\t 制表符;\n 换行
System.out.println("Hello\tworld");
System.out.println("Hello\nworld");
//布尔值扩展
boolean flag = true;
if (flag) { } //不需要写flag=true,默认
}
}