【Java】Java_09 类型转换

1.自动类型转换

自动类型转换:容量小的数据类型可以自动转换为容量大的数据类型。在图中,黑色的实线表示无数据丢失的自动类型转换,而红色的虚线表示在转换时可能会精度的损失。

 特例可以将整型常量直接赋值给byte, short, char等类型变量,而不需要进行强制类型转换,只要不超出其表数范围

            Short  b = 12;     //合法

            short  b = 1234567;    //非法

2.强制类型转换(Cast

 

强制类型转换,又被称为造型,用于显式的转换一个数值的类型在有可能丢失信息的情况下进行的转换是通过造型来完成的,但可能造成精度降低或溢出。

 

强制类型转换的语法格式:“(type)var”,运算符“()”中的type表示将值var想要转换成的目标数据类型

 

当将一种类型强制转换成另一种类型,而又超出了目标类型的表示范围,就会被截断成为一个完全不同的值

 

3.基本类型转化时常见错误和问题

 

操作比较大的数时,要留意是否溢出,尤其是整数操作时(详细请见代码)

代码示意:

public class TestCastType{
    public static void main(String[] agrs){
        //转型
        byte a = 100;
        //超过byte的范围,精度损失错误
        //byte b = 300;
        //char c = -3;
        char d = 'A';
        int e = d;
        System.out.println(d);
        System.out.println(e);
        
        //测试强制转型
        int f = -100;
        char g = (char)f; //-100已经超过char的表数范围,所以转换成完全不同的值
        System.out.println(g);
        
        //类型提升 做所有的二元运算符(+-/*%),都会有类型提升的问题
        int c1 = 100;
        long c2 = 200;
        long c3 =(long)(c1+c2);//不做类型转换则会报错:精度损失 
        
        
        //一个活80岁的人一辈子脉搏的跳动次数
        int times = 75;
        long total = 75L*60*24*365*80;
        System.out.println(total);
        //特别说明:在转型时候最好在75后面就强制转换为long,避免在数据相乘过程中超过表数范围造成转型失败
    }
}

 

posted @ 2017-04-13 21:46  OLIVER_QIN  阅读(409)  评论(0编辑  收藏  举报