Java数据类型转换

1、什么时候发生数据类型转换:

        a.等号两边数据类型不一致

        b.不同类型的数据运算

2、分类:

        a.自动类型转换

                将取值范围小的数据类型赋值给取值范围大的数据类型 -> 小自动转大

                取值范围小的数据类型和取值范围大的数据类型数据做运算 -> 小自动转大

        b.强制类型转换

                当取值范围大的数据类型赋值给取值范围小的数据类型 -> 需要强制转换

3、基本数据类型中按照取值范围从小到大进行排序:

       

 byte (1byte=8个二进制位), short (2byte), char (2byte) , -> int (4byte) -> long (8byte) -> float(4byte) -> double (4byte)

4、强制类型转换:

注意:

        1、不要随意写成强转的格式,因为会有精度损失问题以及数据溢出现象,除非没有办法

        2、byte和short定义的时候如果等号右边是整数常量,如果不超出byte和short的范围,不需要我们自己强转,jvm自动转型 byte和short如果等号右边有变量参与,byte和short自动提升为int, 然后结果再次赋值给byte或者short的变量,需要我们自己手动强转

        3、char类型数据如果参与运算,会自动提升为int类型, 如果char类型的字符提升为int型会去ASCII码表(美国信息交换标准代码表)范围内去查询字符对应的int值 如果在ASCII码表中没有找到对应的int值,会去Unicode码表(万国码)中去找

public class Demo04DataType{
    public static void main(String[] args){
        //精度损失
        int i = (int)2.9;
        System.out.println(i);
        
        /*
        数据溢出
        int型占内存4个字节,4个字节变成二进制是32位
        100个亿: 0010 0101 0100 0000 1011 1110 0100 0000 0000  -> 34位二进制
        100个亿的二进制位比int型的二进制位多出来2位,此时去掉最前面的两位
        10 0101 0100 0000 1011 1110 0100 0000 0000
        10 0101 0100 0000 1011 1110 0100 0000 0000 -> 1410065408
        */       
        int j = (int)10000000000L
        System.out.println(j);//1410065408                                                                                            
    }
}

byte赋值超范围问题

 public class Demo04DataType{
      public static void main(String[] args){
          byte b = (byte)200;
          System.out.println(b); //-56
          
          byte b1 = (byte)128;
          System.out.println(b1); //-128 byte的取值范围是 (-128->127) 127的下一位是-128                                  
      }
 }
 
 /* 
 200
 原码  1100 1000        原码第一位不变,其余按位取反得到反码
 反码  1011 0111        反码加1得到补码
 补码  1011 1000        补码第一位为1表示负数,第一位为0表示正数,该数为 11 1000 即 -56
 */

  • 15
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值