秦疆的Java课程:24 基础 数据类型扩展及面试题讲解

发布时间 2023-11-10 15:33:19作者: Acolyte_9527

1、整数扩展 进制

  • 二进制数:0b开头
    八进制数:0开头
    十六进制数:0x开头
public class DEMO1 {  
    public static void main(String[] args) {  
        //整数扩展:进制   
        int A = 10;  
        int B = 0b10;//二进制  
        int C = 010;//八进制  
        int D = 0x10;//十六进制  
  
        System.out.println(A);  
        System.out.println(B);  
        System.out.println(C);  
        System.out.println(D);  
    }  
}

跑出来的结果是:
10
2
8
16

2、浮点数扩展

public class DEMO2 {  
    public static void main(String[] args) {  
        //浮点数扩展:  
        float E = 0.1f;  
        double F = 1.0/10;  
  
        System.out.println(E==F);//判断E和F是否相等  
        System.out.println(E);  
        System.out.println(F);  
    }  
}

结果是:
false
0.1
0.1
看起来相等,但是实际上不相等。

public class DEMO3 {  
    public static void main(String[] args) {  
        //浮点数扩展:  
        float G = 114514114514114514F;  
        float H = G + 1;  
  
        System.out.println(G==H);  
    }  
}

输出的结果是true

  • 浮点数:有限、离散,有舍入误差,接近但不等于。
  • 最好完全避免使用浮点数进行比较!!!
  • 银行业务使用数学工具类:BigDecimal

3、字符扩展 Unicode

public class DEMO4 {  
    public static void main(String[] args) {  
        //字符扩展  
        char I = 'Z';  
        char J = '中';  
  
        System.out.println(I);  
        System.out.println((int)I);//强制转换为数字  
        System.out.println(J);  
        System.out.println((int)J);  
    }  
}

结果为:
Z
90

20013

  • 所有的字符本质还是数字
  • Unicode编码可以处理各种语言文字,从U0000-UFFFF,是十六进制。
public class DEMO5 {  
    public static void main(String[] args) {  
        //字符扩展
        char K = '\u4e2d';  //Unicode编码
  
        System.out.println(K);  
    }  
}

输出结果为:
前面“中”对应的十进制数是“20013”,转换为十六进制为“4e2d”

4、字符拓展 转义字符

public class DEMO6 {  
    public static void main(String[] args) {  
        //字符拓展 转义字符举例
        //制表符 \t
        //换行 \n
        System.out.println("Hello\tWorld");  
        System.out.println("Hello\nWorld");  
    }  
}

输出结果为:
Hello World
Hello
World
(这里\t的显示效果和IDEA里不一样,IDEA里会有横线,可能是显示设置的问题。)

  • 转义字符有很多,可以自行查找试用。

5、内存地址

public class DEMO7 {  
    public static void main(String[] args) {  
        //内存地址不同
        String L = new String ("hello world");  
        String M = new String ("hello world");  
        System.out.println(L==M);  
        //内存地址相同
        String N = "hello world";  
        String O = "hello world";  
        System.out.println(N==O);  
    }  
}

输出结果:
false
true
(IDEA里输入上述代码,"new String ("hello world")中间会自动出现original:字样。不要手动输入original:,会报错的。)

  • new开辟了新的内存空间,也就是L和M的内存地址是不同的,而不使用new的N和O指向的是同一个地址。

6、布尔值扩展

public class DEMO8 {  
    public static void main(String[] args) {  
        //布尔值扩展  
        boolean flag = true;  
        if (flag==true){}//新手  
        if (true){}//老手  
    }  
}

这个代码没有跑,只是想说明if (flag==true){}if (true){}完全相同。

  • 代码要精简易读。