数据类型&数据类型扩展&数据类型的转换

221 阅读4分钟

数据类型&数据类型扩展&数据类型的转换

数据类型

  1. 强类型语言:要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用(安全性高 ,运行速度慢)
  2. 弱类型语言:(例如:javascript )不用严格的符合规定,数据类型能够被忽略的语言,一个变量能够赋不同类型的值。

image.png

  • 基本类型(primitive type)

    //  八大基本数据类型
    //         整数
             int num1 = 10;  //最常用
             byte num2 = 20;
             short num3 = 30;
             long num4 = 30L; //long类型要在数字后面加一个L
    //         小数:浮点数
             float num5 = 30.1F; //float类型要在数字后面加个L
             double num6 = 3.14;
    //         字符
             char name='A';
    //         字符串,String不是关键字,是类
             String name2 = "字符";
    //         布尔值:是非
             boolean flag = true;
             boolean flag2 = false;
    
  • 引用类型(reference type):类,接口,数组

关于字节的科普:

image.png

数据类型的扩展

public class Demo01 {
    public static void main(String[] args) {
//        整数扩展:   进制  二进制0b   十进制     八进制0    十六进制0x
        int i = 0b10;
        int i2 = 10;
        int i3 = 010;
        int i4 = 0x10;
        System.out.println(i);  //2
        System.out.println(i2); //10
        System.out.println(i3); //8
        System.out.println(i4); //16
​
//        浮点数扩展 问:银行业务如何表示钱  答:BigDecimal 数学工具类
//        float 有舍入误差,接近但不等于
//        最好完全避免使用浮点进行比较
        float f = 0.1f;     //0.1
        double d = 1.0/10;  //0.1
        System.out.println(f==d);  // false
​
        float d1 = 12345671234567f;
        float d2 = d1 + 1;
        System.out.println(d1==d2);  //true
​
//        字符串扩展
        char c1 = 'a';
        char c2 = '国';
        System.out.println(c1);  //A
        System.out.println((int)c1);  //65  //强制转换
        System.out.println(c2);  //显示乱码  中文使用的问题
        System.out.println((int)c2);  // 22269   //强制转换
//        所有的字符本质还是数字
//        ASCII码 编码表  例:A=65
//        ASCII码 编译会从  U0000-UFFFF  表示(用16进制)
        char c3 = '\u0061';
        System.out.println(c3);  // a 十六进制0061转换为十进制97
        System.out.println((int)c3);  // 97
​
//        转义字符
//        \t  制表符(中间会有四个空格) \n  换行
​
//      oriqinal 直接在括号里打双引号他会自动出来
        String sa = new String("hello world");
        String sb = new String("hello world");
        System.out.println(sa==sb);  //false
​
        String sc = "hello world";
        String sd = "hello world";
        System.out.println(sc==sd);  //true
//        从内存的角度分析 第一组是各自开辟了新的空间(引用类型) 第二组是值类型
//        new就是在内存开辟了一个空间,然后这个空间有地址,new了几个就有几块空间,就有几个地址,比较的是地址所以不相等
//        相当于内存地址和内存内容的比较
//         ==在基本类型中是比较内容,在引用类型中是比较栈值,而equals可以用来比较内容的,基本类型不能使用equals进行比较。热门面试题
​
//        布尔值扩展
        boolean flag = true;
        if(flag==true){}
        if (flag){}
//        两种形式表达的意思是一样的
    }
​
}
​

数据类型的转换

public class Demo02 {
    public static void main(String[] args) {
//        对于不理解为什么要转换的原因是因为,在早期内存很珍贵,因此要严格控制所占内存的大小,所以才有byte这样的数据类型,而现在内存已经很大了,所以不需要考虑,这里转换,只是理解不同存储空间
        int i = 128;
        byte b = (byte)i;  //内存溢出 byte最高127
//        强制转换 (类型)变量名  高--低
//        自动转换  低--高
        System.out.println(i);   //128
        System.out.println(b);  //-128
        /*注意点:
        1.不能对布尔值进行转换
        2.转换的时候可能存在内存溢出,或者精度问题(若小数转换为证书的话,会直接舍弃,出现精度问题)   */
​
        char c = 'a';
        int d = c + 1;
        System.out.println(d);  //98
        System.out.println((char) d);   //b//        常见的问题
//        操作比较大的时候,注意溢出问题
//        JDK7新特性:数字之间可以用下划线分割
        int money = 10_0000_0000;
        int years = 10;
        int total = money * years;   //1410065408 计算的时候溢出了
        long total2 = money * years;  //money 和 years 类型都是int  默认是int 转换之前就出现问题了
        long total3 = money * ((long)years); //解决方法:先把其中一个转换为long
        System.out.println(total);  //1410065408
        System.out.println(total2);  //1410065408
        System.out.println(total3); //10000000000
    }
}
\