• Java之基本数据的类型转换


    自动类型提升

    1.boolean不允许进行类型转换

    布尔类型boolean占有一个字节,由于其本身的特殊含义,使得与其他基本类型不能进行类型的转换(既不能进行自动类型的提升,也不能强制类型转换),否则将编译出错。
     

    2.数值范围小的类型→数值范围大的类型,JVM在编译过程中负责对数值类型进行自动提升

    byte a = 1000;   // 编译出错 Type mismatch: cannot convert from int to byte
    float b = 1.5; // 编译出错 Type mismatch: cannot convert from double to float
    byte c = 3; // 编译正确
    【例外】前两句很好理解,但int赋值byte类型编译正确是因为:

    int→(byte/char/short)的类型转换在一定条件下不需强制转换

    JVM在编译过程中,默认为int类型的数值赋值给一个比int型数值范围小的数值类型变量(在此统一称为数值类型k,k可以是byte/char/short类型)会进行判断,若此int型数值超过k的范围,则会直接编译出错。但若此int型数值尚在数值类型k范围内,jvm会自定进行一次隐式类型转换,将此int型数值转换成类型k。
     

    3.byte→char,char→short不进行自动类型提升

    由于数值范围的原因,使得byte、short与char之间无法进行类型转换,但byte可以提升至short类型。
     

    4.数据的默认类型

    Java中,整数类型(byte/short/int/long)对于未声明数据类型的整形默认为int类型;浮点类型(float/double)默认为double类型。
    long a = 10000000000; //编译出错: The literal 10000000000 of type int is out of range 
    10000000000默认数据类型是int,而int的数值范围是-2^31 ~ 2^31-1,显然超出范围,所以编译报错,这里只需要申明自生默认类型即可。-----long a = 10000000000L; //编译正确
     
     

    数值类型的强制转换

    1.强制类型转换一数值类型转换至范围更低,可能会丢失精度

    byte p = 3; // 编译正确:int到byte编译过程中发生隐式类型转换
    int a = 3;
    byte b = a; // 编译出错:cannot convert from int to byte
    byte c = (byte) a; // 编译正确
    float d = (float) 4.0;
    分析:b=a编译报错是因为a是变量,编译期无法确定。
     

    2.强制类型转换的原理分析

    int a = 233;
    byte b = (byte) a;
    System.out.println("b:" + b); // 输出:-23
    分析:233的二进制表示为:24位0+11101001,byte只有8位,从高位开始舍弃得到:11101001,由于最高位为符号位,1表示负数,其相应数值表示为-23。
     
     

    3.进行数学运算时,数据类型会自动提升到运算符左右之较大者

    byte e = 10, f = 11;
    byte g = e + f; // 编译错误 +直接将10和11类型提升为了int
    byte h = (byte) (e + f); //编译正确
     
    关于强转丢失精度的相关底层原理可查看Java之&0xff用法解析以及原码、反码、补码相关知识
     
     

     





  • 相关阅读:
    python eval() 进行条件匹配
    spring boot 学习
    JAVA基础
    在mac上进行JAVA开发
    移动端开发基础【8】页面生命周期
    数据挖掘【1】概述(引言)
    项目管理【26】 | 项目成本管理-规划成本管理
    项目管理【24】 | 项目进度管理-控制进度
    项目管理【25】 | 项目成本管理-成本管理概念
    操作系统【8】 Linux虚拟内存和物理内存
  • 原文地址:https://www.cnblogs.com/linux007/p/5782712.html
Copyright © 2020-2023  润新知