• 数据类型及转换


    1.数据类型

    类型 存储需求 取值范围
    byte 1 字节 -128 ~ 127
    short 2 字节 -32 768 ~ 32 767
    int 4 字节 -2 147 483 647 ~ 2 147 483 647(正好超过20亿)
    long 8 字节 -9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807
    float 4 字节 大约 ± 3.402 823 47E+38F (有效位数 6 ~ 7 位)
    double 8 字节 大约 ± 1.797 693 134 862 315 70E+308 (有效位数为 15 位)

    2.数值之间的转换规则

    在图 3-1 中有 6 个实心箭头,表示无信息丢失的转换;有 3 个虚箭头, 表示可能有精度损失的转换。

    当进行二元操作时,先要将两个操作数转化为同一种类型,然后再进行计算。

    • 如果两个操作数中有一个是 double 类型, 另一个操作数就会转换为 double 类型。
    • 否则,如果其中一个操作数是 float 类型,另一个操作数将会转换为 float 类型。
    • 否则, 如果其中一个操作数是 long 类型, 另一个操作数将会转换为 long类型。
    • 否则, 两个操作数都将被转换为 int 类型。

    3.强制类型转换

    /**
     * 类型强制转换
     * a =  9
     * b =  10
     */
    private static void typeCast(){
        double d = 9.97;
        int a = (int)d;
        int b = (int)Math.round(d);
        //int b = Math.round(d);
        System.out.println("a =  " + a);
        System.out.println("b =  " + b);
    }
    
    • a = 9 : 强制类型转换通过截断小数部分将浮点值转换为整型。
    • b = 10 : 使用 Math.round() 方法对浮点数进行舍人运算, 以便得到最接近的整数
    • Math.round() 方法返回的结果为 long 类型,由于存在信息丢失的可能性,所以只有使用显式的强制类型转换才能够将 long 类型转换成 int 类型。

    4.特别注意

    警告:如果试图将一个数值从一种类型强制转换为另一种类型, 而又超出了目标类型的表示范围,结果就会截断成一个完全不同的值。例如,(byte ) 300 的实际值为 44。

    --《Java核心技术 卷1 基础知识 原书第10版》P41

    /**
     * 输出 b = 44
     * @param args
     */
    public static void main(String[] args){
       byte b = (byte)300;
       System.out.println("b = " + b);
    }
    
  • 相关阅读:
    oracle恢复被覆盖的存储过程
    POJ 2478 Farey Sequence
    java不求有功,但求无过—异常处理
    图论-树的最大路
    MP3的频率、比特率、码率与音质的关系
    基于Lucene3.5.0怎样从TokenStream获得Token
    Groovy新手教程
    Binder机制1---Binder原理介绍
    UVA
    Hibernate Criterion
  • 原文地址:https://www.cnblogs.com/huaranmeng/p/12771054.html
Copyright © 2020-2023  润新知