• Java数据类型转换问题


    基本数据类型

    整数型

    byte --- 字节型 --- 1个字节 --- -27~27-1 -> -128~127

    byte b1 = 25; byte b2 = 127;

    short --- 短整型 --- 2个字节 --- -215~215-1 -> -32768~32767

    int --- 整型 --- 4个字节 --- -231~231-1 --- 在Java中整数默认为int类型

    System.out.println(5);

    long --- 长整型 --- 8个字节 --- -263~263-1 --- 需要在结尾添加l/L作为标识

    long l = 2L;

    浮点型

    float --- 单精度 --- 4个字节 --- 大概-1038~1038 ---需要在结尾添加f/F作为标识

    float f = 3.5f;

    double --- 双精度 --- 8个字节 --- 大概-10308~10308---在Java中小数默认为double类型

    double d = 2.64;  double d2 = 5.21D;  double d3 = 7.33d;

    double d = 4e4; 表示4*104 aeb表示a*10b,表示十进制的科学计数法

    double d = 0x5p3; 表示十六进制的科学计数法 xpy表示x*2y

    字符型

    char --- 字符型 --- 2个字节 --- 0~65535 ---默认编码就是utf-16

    char c = ‘a’;  char c2 = ‘4’; char c3 = ‘u20ac’;

    // 不存在空字符和负数的字符,无论这个字符是纯数字或者是字符

    boolean类型

    数据类型的转换

    自动类型转换/隐式转换

    byte b = 3;

    int i = b;

     

    int i =7;

    long l = i;

     

    float f = 3.57f;

    double d = f;

    规律一:小的类型可以自动转化为大的类型

    long l = 10; --- Java中整数默认为int,所以10就是int类型,int可以自动提升为long类型 --- 如果一个整数在int的范围内,那么在赋值给long类型的时候可以不加L

    int i = 10;

    float f = i;

    规律二:整数可以自动转化为小数,但是可能产生精度损失

    float f = 500;

    char c = ‘a’;

    int i = c;

    规律三:字符可以自动转化为整数

    short类型和char类型范围没有完全重合也不能完全包含

    short s = ‘a’; --- 可以 --- a是字面量,是一个确定的值所以在编译的时候就能确定 a的值是否在short的取值范围内;如果在这个范围内,就允许转化

    char c = 97; --- 可以 --- 97是字面量,是一个确定的值。所以在编译的时候就能确定 97的值是否在char的取值范围内;如果在这个范围内,也允许转化

    char c = ‘a’;

    short s = c; --- 不可以 --- c是变量,所以在编译期间只能确定c是一个char类型的值但是不能确定c的具体值;那么就会在编译期间比对两个类型之间是否能够完全转化,发现char类型不能完全转化为short类型,所以认为这个值会有超过short取值范围的风险,因此不允许转化

    short s = 97;

    char c = s; --- 不可以

    byte/short/char可以参与自增/自减运算,运算完成之后结果类型没有改变 --- 因为在底层做了一次强制转换

    规律四:byte,short,char在计算的时候会自动转换为int类型。以下代码报错。单纯的赋值不算是运算。

    char c = 97;

    		<p style="margin-left:0pt;">c = c + 1;</p>
    		</td>
    	</tr></tbody></table><p>规律五:在自增自减以及简化运算的时候会发生强转,所以以下代码即使在超出范围的情况下都不会报错。</p>
    

    char c = 97;

    		<p style="margin-left:0pt;">c *= 300;</p>
    		</td>
    	</tr></tbody></table><p style="margin-left:0pt;">&nbsp;</p>
    

    现在的问题是

    Float f = 2.6; // 报错①在Java中小数默认为double类型

    但是char a = 5; // 成功②在Java中整数默认为int类型

    他们两个都是字面量但是结果不同,自动int理论和字面量理论都遇到了挑战。按照字面量理论来说①的实际值没有超过但是报了错②完美运行。按照自动int理论来说,②应该报错但是它是按照字面量理论执行的。综上,所以不知道真正的假设。

    Byte(等)的溢出问题

    强制类型转换/显式转换

    int i = 5;

    byte b = (byte)i; 表示将变量i强制转换为byte类型之后再赋值给变量b

    注意:大类型可以强转为小类型,但是在转化的时候因为字节的损失所以可能导致数据不准确

    double d = 3.97;

    int i = (int)d; --- 小数在转化为整数的时候会舍弃小数部分。

     

  • 相关阅读:
    Homekit_Dohome_智能灯带
    智能蓝牙球泡灯
    域名与网站名区别
    手机屏幕的分辨率和图像尺寸关系
    关于背景图片定位问题
    http://selectorgadget.com/
    经典网址
    进度条
    html5 触摸控制
    html背景音乐
  • 原文地址:https://www.cnblogs.com/jpfss/p/9913357.html
  • Copyright © 2020-2023  润新知