1.整数扩展
如何在Java中表示二进制、八进制、十六进制整数。
public class List02 {
public static void main(String[] args) {
//整数拓展:在Java中如何表示二进制、八进制、十六进制
int i = 101;
int i2 = 0b101; // 二进制使用'0b'开头表示
int i3 = 0101; // 八进制使用'0'开头表示
int i4 = 0x101; // 十六近进制使用'0x'表示
System.out.println(i); // 输出101
System.out.println(i2); //输出5
System.out.println(i3); //输出65
System.out.println(i4); //输出257
}
}
2.浮点数扩展
在进行银行类业务时,往往涉及数额较大的金钱,如果使用浮点数float或者double表示钱数可能会产生错误。以下是错误举例:
public class List03 {
//浮点数扩展
public static void main(String[] args) {
float f = 0.1f;
double d = 1.0/10;
System.out.println(f); //输出0.1
System.out.println(d); //输出0.1
System.out.println(f==d);//输出 false,
/*
尽管 f 和 d 这两个数值在十进制下看起来是相等的,但由于浮点数的精度和表示方式,
它们在内存中的实际存储值可能存在微小的差异,因此比较这两个值时会发现它们不相等。
*/
System.out.println("=================================");
float d1 = 2323232323232323f;
float d2 = d1 +1;
System.out.println(d1==d2); // 输出true
/*尽管d1和d2看起来不相等,但是d1 和 d2比较的结果却是相等的,
这是因为float的精度是有有限的,浮点数的表示存在舍入误差;
*/
}
}
Java中的 float 和 double 类型不相等的原因主要是因为浮点数的表示存在舍入误差。
浮点数(包括 Java 中的 float 和 double 类型)在计算机中的表示是有限的,并且存在舍入误差。这种误差来源于浮点数的二进制表示方式,以及计算机内部存储浮点数时所能提供的精度限制。具体来说,即使两个浮点数看起来数值相同,由于它们的二进制表示可能存在微小的差异,因此它们在内存中的存储值并不完全相同,从而导致它们在比较时可能不相等。
例如,在 Java 中,当你声明一个 float 类型的变量并赋值为 0.1f 时,以及声明一个 double 类型的变量并计算 1.0/10 时,尽管这两个数值在十进制下看起来是相等的,但由于浮点数的精度和表示方式,它们在内存中的实际存储值可能存在微小的差异,因此比较这两个值时会发现它们不相等。
为了避免这种精度问题,Java 提供了 BigDecimal
类,它允许进行高精度的数学运算,适用于需要高精度计算的场景,如金融计算。BigDecimal
通过以字符串的形式存储数字来进行计算,从而避免了二进制浮点数表示可能带来的精度损失问题。
总的来说,浮点数的比较应该谨慎进行,特别是在需要高精度计算的场景中,应优先考虑使用 BigDecimal
类型来确保计算的准确性和稳定性。
3.字符扩展
所有的字符本质还是数字,字符可以通过Unicode编码表转换为整数;
public class List04 {
public static void main(String[] args) {
char c1 = 'a';
char c2 = '中';
System.out.println(c1);//输出‘a’
System.out.println((int)c1); //将字符强制转换为整数,输出97
System.out.println(c2);//输出 ‘中’
System.out.println((int)c2); //将字符强制转换为整数,输出20013
char c3 = '\u0061'; //Unicode 编码写法;0061是十六进制,转为十进制就是 97
System.out.println(c3); //输出 a
}
}
1.Unicode编码
Unicode编码是一种字符编码标准,旨在解决传统字符编码方案的局限性,为全球几乎所有书写系统提供统一的字符编码。它通过为每个字符分配一个唯一的代码(即一个整数),以数字形式处理字符,并将视觉演绎工作留给其他软件处理,如网页浏览器或文字处理器。Unicode编码方案包括UTF-8、UTF-16和UTF-32等多种格式,用于将Unicode字符转换为计算机可以处理的二进制数据。UTF-8是最常用的格式,支持变长编码,可以兼容ASCII编码并扩展到支持更多字符。Unicode编码表包含了全球几乎所有书写系统的110多万个字符,提供了一个统一的字符编码标准,支持所有语言。
Unicode编码的具体实现包括将字符映射到唯一的数字代码上,这些代码可以是1到4个字节的长度,取决于字符的复杂性和所需的编码空间。例如,ASCII字符通常只需要一个字节,而更复杂的字符可能需要多个字节来表示。Unicode编码的转换工具和表可以帮助用户查询特定字符的Unicode编码,或者将Unicode编码转换回可读的字符形式。
2.转义字符
转义字符举例:
public class List05 {
public static void main(String[] args) {
//转义字符
System.out.println("Hello,World");
System.out.println("Hello\tWorld");// \t 制表符
System.out.println("Hello\nWorld");// \n 换行
}
}
4.布尔值扩展
public class List06 {
public static void main(String[] args) {
boolean flag = true;
if (flag){
}//老手写法
//代码要精简易读,判断是否为真可以直接写成(flag);
if (flag==true){
}//新手写法
}
}