javaSE06-数据类型转换

javaSE06-数据类型转换

1. 自动类型转换(AutoConvert)

​ 当java程序在进行赋值或者运算时,精度小的类型会自动转换为精度大的数据类型,这个就是自动类型转换。数据类型按精度大小排序为:

​ char===>int===>long===>float===>double

​ byte===>short===>int===>long===>float===>double

个人理解:

​ 小空间换进大空间可以自然进行,大空间换小空间需要舍去一部分,所以需要强制转化。由于整数精度没有小数大,所以小数在后面。

  • 1.1 有多种类型的数据混合运算时,系统会先将所有数据自动转换为容量最大的数据类型,然后进行运算。

    例:

public class AutoConvert{
    public static void main(String[] args){
        
        int i = 10;
        float = i + 1.1;//运行错误, i+1.1===>结果类型为double (1.1为double类型)
        
        //正确演示
      	float = i + 1.1f; // 结果为float类型 (1.1f 为float类型)
        double = i + 1.1; // 结果为double类型(1.1为double类型)        
        
    }
}
  • 1.2 当我们把精度(容量)大的类型赋值给精度(容量)小的类型时,会发生错误,反之则会自动转换。
public class AutoConvert{
    public static void main(String[] args){
        
        int i = 1.1;//错误,(1.1为double类型,大转小有精度损失)
            
        
    }
}

  • 1.3 byte,short与char类型之间不能自动转换。
  • ​1.4 当把具体的数值赋给byte时,系统会先判断所赋予的值是否在byte的范围内,如果在范围内,就可以赋值;如果赋予的值为变量,那么进行赋值会先判断变量的类型,如果变量的类型比byte大或者不相关(char),那么无法自动转换。
public class AutoConvert{
    public static void main(String[] args){
        
        int i = 1.1;//错误,(1.1为double类型,大转小有精度损失)
            
        
    }
}
  • ​ 1.5 byte,short与char三者之间可以进行计算,计算时系统会首先将三者转换为int类型。
public class AutoConvert{
    public static void main(String[] args){
        
        byte b = 1;
        short s1 = 1;
        
        short s2 = s1 + b;// 错误,s1+b1计算结果为int类型,int类型无法自动转换为short类型;
        int i = s1 + b;//正确,可以运行,结果为2;
            
        
    }
}
  • ​ 1.6 Boolean类型不参与自动转换。
  • ​ 1.7 自动提升原则:表达式结果的类型会自动提升为表达式中元素最大的类型。
public class AutoConvert{
    public static void main(String[] args){
        
        byte b = 1;
        short s1 = 1;
        int i = 100;
        float f = 100f;
      
        float f1 = s1 + b + i + f;//运算结果类型为float,因为运算中元素类型最大为 f(float)型,因此结果自动提升为float类型;
            
        
    }
}

2.强制类型转换(ForveConvert)

  • 2.1 当数据类型转换为由大到小时,无法自动转换,这时就需要强制转换。强制转换需要使用强制转换符()完成。
  • 2.2 强制转换时,会存在内存溢出以及精度损失的情况,使用时应格外注意!!!
  • ​ 2.3 内存溢出
public class ForceConvert{
    public static void main(String[] args){
        int i = 128;
        byte b = (byte)i; //内存溢出,byte范围为-128~127;

        //强制类型转换 (类型)变量名  高--低
        //自动转换  低--高

        System.out.println(i); // 128;
        System.out.println(b); // -128,内存溢出; 
        
        
    }
}

​ - 2.4 精度损失

public class ForceConvert{
    public static void main(String[] args){

        //强制类型转换 (类型)变量名  高--低
        //自动转换  低--高
        
        int n1 = (int)1.9; //强制将double类型转换为int类型;
        System.out.println(n1);//输出结果为1,造成了精度损失;
        
        System.out.println((int)23.7); //23 
        System.out.println((int)-47.5F); //-45
             
        
    }
}

  • 2.5 强制转换只会对于最近的操作有效,往往会使用小括号(),来提升优先级。
public class ForceConvert{
    public static void main(String[] args){

        //强制类型转换 (类型)变量名  高--低
        //自动转换  低--高
        
        int x = (int)10*3.1+6*1.5; //运行错误,只将10转换为了int类型,运算结果仍为double类型,无法强制将double类型转换为int类型;
        
        // 使用小括号提升优先级
        int x = (int)(10*3.1+6*1.5);  // 40,先优先计算结果(double类型),再把计算的结果转换为int类型;
             
      }   
}

  • 2.6 char类型可以保存int的常量值,但无法保存int的变量值,需要强制转换。
public class ForceConvert{
    public static void main(String[] args){
             
               
        char c = 'a';
        int d = c+1;
        System.out.println(d); // 98 a对应的数据+1
        System.out.println((char)d); // b a对应的数据+1 = 98 所对应的转义
        
        
        //char类型可以保存int的常量值,但无法保存int的变量值。
        char c1 = 100;
        int n = 100;
        char c2 = m;//运行错误,char类型无法保存int变量;
        char c3 = (char)m;//强制转换后可以运行;
        System.out.println(c3); // d 100所对应的转义;
     }   
}

  • 2.7 byte,short与char三者之间可以进行计算,计算时系统会首先将三者转换为int类型。

3.总结

  • 3.1 不能对布尔值进行转换。
  • 3.2 不能把对象类型转化为不相干的类型。​
  • 3.3 大容量转换至低容量时,强制转换。
  • 3.4 转换时可能存在内存溢出,或者精度问题。
  • 3.5 操作比较大的数的时候,注意溢出问题。
  • 3.6 jdk7 的新特性,数字之间可以用下划线分割。例:1000000 1000_000,下划线并不会被输出。
public class ForceConvert{
    public static void main(String[] args){
        //操作比较大的数的时候,注意溢出问题
        //jdk7 的新特性,数字之间可以用下划线分割。例:1000000 1000_000,下划线并不会被输出。
        int money = 10_0000_0000;
        int years = 20;
        int total = money*years; //-1474836480,计算时溢出
        long total2 = money*years;//-1474836480,默认int,先计算,计算时已经溢出,转换后仍是已溢出状态的数据
        long total3 = money*((long)years);//20000000000,现将数据转换为long,防止溢出,再计算

        System.out.println(total3);//20000000000
     }   
}

4.基本数据类型与String类型的相互转换

  • ​ 4.1 基本数据类型转String类型语法: 将基本类型的值+" " 即可。
public class StringToBasic{
    public static void main(String[] args){
        //基本数据类型转String类型语法: 将基本类型的值+" " 
        int i = 100;
        float f = 1.2f;
        double d = 1.5;
        boolean b = true;
        String s1 = i + "";
        String s2 = f + "";
        String s3 = d + "";
        String s4 = b + "";
        System.out.println(s1);// 100
        System.out.println(s2);// 1.2
        System.out.println(s3);// 1.5 
        System.out.println(s4);// true
        
     }   
}
  • ​ 4.2 String类型转基本数据类型语法:通过基本类型的包装类调用parseXX方法即可。
public class StringToBasic{
    public static void main(String[] args){
        //String类型转基本数据类型语法:通过基本类型的包装类调用parseXX方法
     
        String s1 = "153";
        String s2 = "1.2";
        String s3 = "1.5";
        String s4 =  "true";
        int num1 = Integer.parseInt(s1);
        float num2 = Float.parseFloat(s2);
        double num3 = Double.parseDouble(s3);
        Boolean num4 = Boolean.parseBoolean(s4);
        System.out.println(s1);// 100 
        System.out.println(s2);// 1.2
        System.out.println(s3);// 1.5 
        System.out.println(s4);// true
        
     }   
}
  • ​ 4.3 将String类型转换为基本数据类型时,要确保String类型能够转换为有效的数据,比如我们可以把"123"转换为一个整数,但却不能把"hello"转换为一个整数。
  • ​4.4 如果格式不正确,那么就会抛出异常,程序就会终止。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值