Java中类型强制转换的问题

原文:https://blog.csdn.net/tuckEnough/article/details/80020640 

 

类型转换


1、boolean不能转换成其他类型的数据类型
2、默认转换 
        1.byte,short,char——int——long——float——double
        2.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
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值