数据类型重点知识总结
- 
数据类型 - 
强类型语言 - 要求变量的使用严格符合规定,所有变量必须先定义后才能使用。
- 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位操作系统的区别 - 32位的cpu处理器,只能安装32位的电脑操作系统;
- 64位的cpu处理器,则可以安装32位和64位操作系统,所以64位处理器是向下兼容的;
- 但是,如果真的在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);
    }
}
重点分析一下
- 新知识点
- JDK新特性:数字之间可以用下划线分割,符合四位分级,并不会输出下划线。适合我们中国人的一个习惯。非常nice!
- 溢出问题
- 溢出问题:money已经超出了int类型的范围,溢出了。
- 问题滞留
- 这里为什么输出结果还是错的呢,这里涉及到的问题就是在转换为long类型之前。已经出现溢出问题了,到达long这里的时候就是一个有问题的数据。
- 解决方案:
- 
先把一个数转换为long(money和years都行,任选其一),整个表达式都提升为long了.这样就 可以避免溢出了。 
- 
底层原理: - 概念:在Java中,如果两个操作数的类型不同,编译器会将它们都提升到更高的数据类型,并执行操作。这个过程称为“数据类型提升”。
- 规则:Java会将较低的数据类型自动转换为较高的数据类型,以便进行操作。
- 实操:在乘法操作中,如果一个操作数是 int类型,而另一个是long类型,Java会自动将int类型提升为long类型,然后执行乘法操作。
 为什么呢? 因为long类型的范围比int类型更大,可以容纳更大的值,所以将int类型提升为long类型可以避免溢出问题。综上:因此,即使 money是int类型,years是long类型,Java会自动将money提升为long类型,然后执行乘法操作,以确保乘法操作在long类型范围内进行,避免溢出问题。
 
                    
                     
                    
                 
                    
                

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号