Java中类型强制转换的问题

类型转换

  1. boolean不能转换成其他类型的数据类型
  2. 默认转换
    • byte,short,char——int——long——float——double
    • byte,short,char相互之间不转换,参与运算首先转换成int类型
  3. 强制转换:
    • 目标类型 变量名 = (目标类型)(被转换的数据)

损失精度实例

  • double和float类型
//double和float类型
public void test1(){
        double d = 12.345;
        /**
         * 将double的值赋值给float,需要加强制类型转换
         */
        //float f = d;//编译不能通过

        /**
         * 两种方式都可以定义float类型,但是第一种是一个double经过强制转换的
         * 第二种是直接为float类型的数据
         */
        float f1 = (float) 12.345;
        float f2 = 12.345F;
    }
  • byte类型
// byte类型
public void test2(){
        byte b1 = 3, b2 = 4, b;
        /**
         *  对于变量而言,先提升它的类型为int,再做计算,这是将两个整形类型转换为
         *  type类型,会发生进度损失错误
         */
        //b = b1+b2;//不能通过编译

        b = 3 + 4;//常量,先计算结果,然后查看是否在byte的范围内,如果在就不报错
    }
public void test3(){
        /**
         * byte b = 130;
         * 是否有问题?若有,怎么改正?结果是多少?
         */

        /**
         * byte的取值范围:-128~127,130超出范围,报错
         */
        //byte b = 130;//不能通过编译

        //使用强制类型转换
        byte b = (byte) 130;//输出结果为-126
        /**
         * 结果分析如下:
         * 计算机中数据的运算都是通过补码进行计算的
         * ①:获取130这个数据的二进制码
         *      00000000 00000000 00000000 10000010
         *    这是130的原码,也是反码,还是补码
         * ②:int类型为4个字节,byte为1个字节,做截取操作
         *      10000010
         *      这个结果为补码
         * ③:已知补码求原码:
         *          符号位     数值位
         *   补码     1       0000010
         *   反码     1       0000001
         *   原码     1       1111110
         */
        System.out.println(b);//-126
    }
  • char 和int
public void test4(){
        /**
         * 了解ASCII表
         * 'a' 97
         * 'A' 65
         * '0' 48
         */
        System.out.println('a');//a
        System.out.println('a'+1);//97
    }
  • String
public void test5() {
        /**
         * 字符串和其他数据做'+'运算,结果是字符串类型
         * 此时'+'不为加法运算,为字符串连接符
         */
        System.out.println("hello" + 'a' + 1);//helloa1
        System.out.println('a' + 1 + "hello");//98hello

        System.out.println("5+5=" + 5 + 5);//5+5=55
        System.out.println(5 + 5 + "=5+5");//10=5+5
    }

猜你喜欢

转载自blog.csdn.net/tuckEnough/article/details/80020640