这是我第一次系统性的总结java这门语言的基础知识用法,因本人经验有限,所以在总结的过程中如果有错误或者有歧义等等之类的问题,都可以联系我QQ:208017534 不甚感激.

今天给大家介绍的是java中基本数据类型是如何进行相互转换的。在介绍基本数据类型转换之前,先给大家介绍一下什么叫做基本数据类型:
java中数据类型分为两种:1.基本数据类型、2.引用数据类型

基本数据类型大致可以分为4种八类
4种:整型、浮点型、字符型和布尔型
八类:整型(byte、short、int、long)默认类型为int类型、浮点型(float、double) 默认类型为double类型、字符型(char)、布尔型(boolean)

基本数据类型各个类型的取值范围(其中大小指在存储过程中需要占的二进制位)


引用数据类型:引用数据类型包括数组、类和接口

这一章节先不讨论什么是数组,类,接口,封装等等之类的,我会在后面几个章节中着重介绍的。
1.首先先来介绍一下byte的转型方法,下面看代码:
        //byte注意事项 byte字段在进行运算的时候发生转型,
        // 这个时候不能再将byte运算结果直接赋值给byte字段了,需要强制类型转换才可以。
        byte b1=1;
        byte b2=2;
//        byte b3=b1+b2;//编译不通过
        byte b4=(byte)(b1+b2);
        int i1=10;
//        byte b5=i1;//编译不通过
        byte b6=20;
        int i2=b6;
        System.out.println("i2:"+i2);
2.short类型的转换方法和byte类似,如果直接在short类型上进行相互运算就会发生编译不通过的情形了。下面看具体例子:
       //short注意事项 short字段在进行运算的时候发生转型,
        // 这个时候不能再将short运算结果直接赋值给short字段了,需要强制类型转换才可以。
        short s1=1;
        short s2=2;
//        short s3=s1+s2;//编译不通过
        short s4=(short)(s1+s2);
3.long类型的转换就完全可以互相运算了,下面看具体例子:
        long l1=1;
        long l2=2;
        long l3=l1+l2;
        long l4=1+2;
4.并不是所有的类型都可以互相转换的,有些类型差别太大转换会编译不通过或者运行出错的。下面看看具体案例:
        //范围大的转为范围小的可以不需要强制类型转换就可以完成,
        //反之范围小的转换为范围大,因为会发生精度损失,所以必须要强制类型转换才可以,否则编译不通过。
        //但是类型之间转换也是要看字段属性是否相同,例如:int和double就可以进行互相转换,可是int和String就不可以了。
        String str="str";
//        int i=(int)str;//编译不通过

        //这里有个特例就是Object的强制类型转换,因为Object是一个高度抽象的类型,所以可以强制转换为各种类型,
        //编译都可以通过的,可是如果类型不符合,在运行的时候会发生错误。
        Object o="str";
        int i=(int)o;
5.数字字符串又该如何转型为相应的数据类型呢,下面看具体案例的介绍:
        //如果字符串是数字类型的数据,又该怎么进行转换呢?
        int i=Integer.valueOf("1");
        float f=Float.valueOf("1.1");
        double d=Double.valueOf("1.23");
        //如果数字类型想转为字符串,又改如何进行转换呢?
        String strI=String.valueOf(1);
        String strf=String.valueOf(1.0f);
        String strd=String.valueOf(1.22d);
        //还有一种更加坚简单的方法是
        String strIi=1+"";
        String strff=1.0f+"";
        String strDd=1.23d+"";
6.类型转换过程中精度损失具体是损失哪些?下面看具体案例介绍:
        //强制类型转换的过程中,精度是如何进行损失的?小的数据量类型往大的转型又是如何扩大精度的呀?
        int i = 1;
        float f1 = 1.3f;
        float f2 = 1.7f;

        double d1 = 1.4d;
        double d2 = 1.8d;
        double d3 = 2.0;

        int i1 = (int) f1;
        int i2 = (int) f2;

        int i3 = (int) d1;
        int i4 = (int) d2;
        int i5 = (int) d3;

        float ff1 = i;
        float ff2 = (float) d1;
        double dd1 = i;
        double dd2 = f1;

        System.out.println("i1:" + i1);
        System.out.println("i2:" + i2);
        System.out.println("i3:" + i3);
        System.out.println("i4:" + i4);
        System.out.println("i4:" + i4);
        System.out.println("ff1:" + ff1);
        System.out.println("ff2:" + ff2);
        System.out.println("dd1:" + dd1);
        System.out.println("dd2:" + dd2);

        //从结果可以看出在转型的过程中如果是int类型的话,在转化为float或者double都是变成(数值.0)的存在。
        //如果是float或者double转换为int的时候都是浮点型前面的整数部分给int,浮点型小树后面的精度损失掉了。
        //如果是float和double进行互相转换的话就会发生很奇怪的事情,就是例如1.3f变成1.2999999523162842d了
        //所有最好不要再float和double类型上面直接进行互相转换,如果想要原值转换最好是利用字符串来进行转换。
        //例如下面将给出的这个例子:

        float f=1.23f;
        double dd11,dd22;
        String strF=f+"";
        dd11=Double.valueOf(strF);
        dd22=f;
        System.out.println("f:"+f);
        System.out.println("dd11:"+dd11);
        System.out.println("dd22:"+dd22);
7.字符和其他数据类型转换过程是如何进行的呢?下面看看具体案例介绍:
        //类型转换时有字符型参与运算
//        当有字符参与运算时,系统首先回去找对应的ASCII码值,然后在参与运算   如  ‘a’ + 6 = 103
//        注意:int类型是可以赋值给char类型的   如 char  a  = (char) 97;
        char c=(char)97;
        int i='a';
        System.out.println("c:"+c);
        System.out.println("i"+i);

ASCII码表:


今天关于基本类型的转换问题就介绍到这里,因为本人经验有限,没办法介绍的很完全,所以只能挑我日常经常使用的部分给大家做介绍。
如果大家对文章有什么问题或者疑意之类的,可以加我订阅号在上面留言,订阅号上面我会定期更新最新博客。如果嫌麻烦可以直接加我wechat:lzqcode



本文转载:CSDN博客