数据类型重点知识总结

  • 数据类型

    • 强类型语言

      • 要求变量的使用严格符合规定,所有变量必须先定义才能使用
      • java、.NET、C/C++
    • 弱类型语言

      • 相较于强类型语言的规定和要求较为宽松。
      • vb,php,JavaScript
    • Java的数据类型分为两大类

      • 基本数据类型(primitive type)
      • 引用数据类型(reference type)

    jdg

    public class demo2 {
        public static void main(String[] args) {
            //八大基本数据类型
            //整数
    
            int num1 = 10;//最常用
            byte num2 = 20;
            short num3 = 30;
            long num4 = 30L;//long类型要在数字后面加个l
    
            //浮点数:小数
            float num5 = 50.1f;//float类型要在数字后面加个f
            double num6 = 3.1415926d;
    
            //字符类型
            char name = 'a';
            //字符串,String不是关键字,是类
            String namea = "希文";
    
            //布尔值
            boolean flag = false;
    

    补充知识

    • 字节

      • 位(bit):是计算机内部数据储存的最小单位,11001100是一个八位二进制数。

      • 字节(byte):是计算机中数据处理的基本单位,习惯上用大写B来表示。

      • 1B(byte,字节)=8bit(位)

      • 字符:是指计算机中使用的字母、数字、字和符号

    • 转换

      • 1bit表示一位

      • 1Byte表示一个字节 1B=8b

      • 1024B=1KB

      • 1024KB=1M

      • 1024M=1G

        TIPS:一个英文字母为8位,即1个字节;一个汉字为16位,即2个字节。
        

    简单区分一下32位和64位操作系统的区别

    1. 32位的cpu处理器,只能安装32位的电脑操作系统;
    2. 64位的cpu处理器,则可以安装32位和64位操作系统,所以64位处理器是向下兼容的;
    3. 但是,如果真的在64位处理器的电脑上面安装32位操作系统,那么会导致处理器的性能无法充分发挥。
  • 类型转换

    • 由于Java是强类型语言,所以要进行有些运算的时候,需要用的类型转换

      低----------------------------------------------------高

      byte,short,char→int→long→float→double

      这里的低-----高其实是精度的由低到高!

      小数的优先级一定大于整数!

    • 运算中,不同类型的数据先转化为同一类型,然后再进行运算。

    • 强制类型转换(类型)变量名→高-----低

    • 自动类型转换不需要任何操作→低-----高

      public class demo5 {
          public static void main(String[] args) {
              int i = 128;
              double b = i;
              System.out.println(i);
              System.out.println(b);
              //强制转换类型:(类型)变量名→高--低
              /*byte b = i;//转换前
                byte b = (byte)i;//转换后
               */
              //自动转换  不需要加任何东西  低--高
              /*
              注意点:
              1.不能对布尔值进行转换
              2.不能把对象类型转换为不相干的类型
              3.在把高容量转换到低容量的的时候,强制转换
              4.转换的时候可能存在内存溢出,或者精度问题。
               */
              System.out.println("==========================");
              System.out.println((int)23.7);  //23
              System.out.println((int)-45.89); //45
      
              System.out.println("==========================");
              char c = 'a';
              int d = c+1;
              System.out.println(d);
              System.out.println((char)d);
              
          }
      }
      	
      

    溢出问题(重点)

public class demo06 {
    public static void main(String[] args) {
        //操作比较大的数的时候,注意溢出问题。
        //JDK新特性,数字之间可以用下划线分割,符合四位分级,并不会输出下划线。
      1.int money = 10_0000_0000;
        System.out.println(money);

      2.int years = 20;
        int total = money*years;//-1474836480,计算的时候溢出了
        System.out.println(total);

      3.long total2 = money*years;//默认是int,转换为long之前已经出现问题了(溢出了)
        System.out.println(total2);

      4.long total3 = ((long)money)*years;
        //先把一个数转换为long(money和years都行,任选其一),整个表达式都提升为long了.这样就          可以避免溢出了。
        System.out.println(total3);

    }
}

重点分析一下

  1. 新知识点
  • JDK新特性:数字之间可以用下划线分割,符合四位分级,并不会输出下划线。适合我们中国人的一个习惯。非常nice!
  1. 溢出问题
  • 溢出问题:money已经超出了int类型的范围溢出了
  1. 问题滞留
  • 这里为什么输出结果还是错的呢,这里涉及到的问题就是在转换为long类型之前已经出现溢出问题了,到达long这里的时候就是一个有问题的数据
  1. 解决方案
  • 先把一个数转换为long(money和years都行,任选其一),整个表达式都提升为long了.这样就 可以避免溢出了。

  • 底层原理

    • 概念:在Java中,如果两个操作数的类型不同,编译器会将它们提升到更高的数据类型,并执行操作。这个过程称为“数据类型提升”
    • 规则:Java会将较低的数据类型自动转换为较高的数据类型,以便进行操作。
    • 实操:在乘法操作中,如果一个操作数是 int 类型,而另一个是 long 类型,Java会自动将 int 类型提升long 类型,然后执行乘法操作。

    为什么呢?

    因为 long 类型的范围比 int 类型更大,可以容纳更大的值,所以将 int 类型提升为 long 类型可以避免溢出问题。

    综上:因此,即使 moneyint 类型,yearslong 类型,Java会自动将 money 提升为 long 类型,然后执行乘法操作,以确保乘法操作在 long 类型范围内进行,避免溢出问题。

posted @ 2024-05-21 21:26  Xi-wen  阅读(31)  评论(0)    收藏  举报