数据类型转换

数据类型转换

1. 什么时候会发生类型转换:
    a.等号左右两边类型不一致时
    b.不同类型的数据做运算
2.分类:
    a.自动类型转化
      将取值范围小的数据类型赋值给取值范围大的数据类型->小自动转大
      取值范围小的数据类型和取值范围大的数据做运算->小自动转大
    b.强制类型转换
      当取值范围大的数据类型赋值给取值范围小的数据类型->需要强转
      
3.基本数据类型中按照取值范围从小到大排序:
    byte,short,char->int->long->float->double

1.自动类型转换

1.将取值范围小的数据类型赋值给取值范围大的数据类型->小自动转大
2.取值范围小的数据类型和取值范围大的数据做运算->小自动转大
    
public class Demo09DataType{
    public static void main(string[] args){
        /*
            等号右边是整数,整数默认类型是int
            等号左边是long型的变量
            
            将取值范围小的数据类型赋值给取值范围大的数据类型,发生了自动类型转换
        */
        long num1 = 100;
        System.out.println(num1);
        
        int i = 10;
        double b = 2.5;
        /*
        double = int+double
        double = double+double
        int自动提升为了double,发生了制动类转换
        */
        double sum = i+b
        System.out.println(sum);
    }
}    

2. 强制类型转换

1.将取值范围大的赋值给取值范围小的数据类型
    取值范围小的数据类型 变量名 = 取值范围大的数据类型 ->需要强转
    
2.怎么强转:
    取值范围小的数据类型 变量名 = (取值范围小的数据类型)取值范围大的数据类型
    
    
 public class Demo10DataType{
     public static void main(string[] args){
         /*
           等号右数据类型是小数,小数边默认的类型为double
           
         */
         float num1 = 2.5;
         float num = (float)2.5;//有点多余直接float num = 2.5F;就OK
         System.out.println(num1);
         
     }
 }   
    

3.强制类型转换注意事项

1.不要随意写成强制转换格式,因为会有精度损失问题以及数据溢出现象,除非没有办法
2.byte,short定义时如果等号右边是常量,如果不超出byte和short的范围,不需要我们自己转,jvm自动转换。
    byte,short如果等号右边有变量参与,byte和short自动提升为int,然后再次赋值给byte,short的变量需要我们自己手动转
3.char类型如果参与运算,会自动提升为int型,如果char类型的字符提升为int型会区ASCII码表中去查询字符对应的int值,如果ASCII没有就回去Unicode(万国表)码表中去找。
 public class Demo10DataType{
     public static void main(string[] args){
	     //精度损失
         int i = (int)2.1;
         System.out.println(i);
         
         /*
         数据溢出
         int 型占内存4个字节,4个字节变成二进制是32位
         100个亿:10 0101 0100 1011 1110 0100 0000 0000     34位二进制
         100个亿的二进制比int型的二进制多出来2位,此时干掉前面两位
         0101 0100 1011 1110 0100 0000 0000 = 1410065408
         */
         int j = (int)10000000000L;
         System.out.println(j);//1410065408
     
     System.out.println("======================") 

         byte b = 10;
         System.out.println(b);
         
         b = b+1;
         System.out.println(b);
         
         
         char c = 'a';
         System.out.println(c+0);
     }
 }  

posted @ 2026-01-21 16:26  何小德  阅读(2)  评论(0)    收藏  举报