zoukankan      html  css  js  c++  java
  • 「JavaSE 重新出发」02.01 基本数据类型

    基本数据类型

    1. 整型


    注意:Java 没有任何无符号(unsigned)形式的 int、long、short 或 byte 类型。
    不同进制的表示形式:

    • 十六进制数值有一个前缀0x或0X(如0xCAFE)。
    • 八进制有一个前缀0,例如,010对应八进制中的8。很显然,八进制表示法比较容易混淆,所以建议最好不要使用八进制常数。
    • 从Java 7开始,加上前缀0b或0B就可以写二进制数。例如,0b1001就是9。
    • 另外,同样是从Java 7开始,还可以为数字字面量加下划线,如用(1_000_000或0b1111_0100_0010_0100_0000)表示一百万。这些下划线只是为了让人更易读。Java编译器会去除这些下划线。

    2. 浮点型


    可以使用十六进制表示浮点数值。例如,0.125=2^(-3)可以表示成0x1.0p-3。在十六进制表示法中,使用p表示指数,而不是e。注意:底数采用十六进制,指数采用十进制。指数的基数是2,而不是10。(我觉得这里很变态 - -| )
    所有浮点数的计算都遵循 IEEE754 规范。表示溢出和出错情况的三个特殊的浮点数值:

    • 正无穷大(Double.POSITIVE_INFINITY)
    • 负无穷大(Double.NEGATIVE_INFINITY)
    • NaN(不是一个数字,Double.NaN)

    判断是否是“非数值” if((Double.isNaN(x)) // check whether x is "not a number"

    浮点数值不适用于无法接受舍入误差的金融计算中。例如,命令System.out.println(2.0-1.1) 将打印出 0.8999999999999999,而不是人们想象的0.9。这种舍入误差的主要原因是浮点数值采用二进制系统表示,而在二进制系统中无法精确地表示分数1/10。这就好像十进制无法精确地表示分数1/3一样。如果在数值计算中不允许有任何舍入误差,就应该使用BigDecimal类。

    3. char 类型

    char 类型原本用于表示单个字符。不过,现在情况已经有所变化。因为如今,有些 Unicode 字符可以用一个 char 值描述,另外一些 Unicode 字符则需要两个 char 值。(可以参考:·[字符集与编码(二)-编号vs编码/#UTF-16 为何变成变长了?](http://xiaogd.net/字符集与编码(二)-编号vs编码/#UTF-16 为何变成变长了?))强烈建议不要在程序中使用char类型。
    char 类型的值可以表示为十六进制值,其范围从u0000uFFFF
    补充:除了转义序列u之外,还有一些用于表示特殊字符的转义序列,请参看下图。

    所有这些转义序列都可以出现在加引号的字符字面量或字符串中。例如,'u2122’"Hello "

    转义序列u还可以出现在加引号的字符常量或字符串之外(而其他所有转义序列不可以),例如:
    public static void main(Stringu0058u005D args)
    是符合语法规则的,因为u0058 u005D分别表示[ ]
    Unicode转义序列会在解析代码之前得到处理。例如,"u0022+u0022"并不是一个由引号(U+0022)包围加号构成的字符串。实际上,u0022会在解析之前转换为",这会得到""+"",也就是一个空串。
    更隐秘地,一定要当心注释中的u,例如:

    • 注释// u00A0 is a newline会产生一个语法错误,因为读程序时u00A0会替换为一个换行符。
    • 类似地,下面这个注释// look inside c:users也会产生一个语法错误,因为u后面并未跟着4个十六进制数。

    4. boolean类型

    整型值和布尔值之间不能相互转换。

    5. 基本数据类型之间的转换

    注:虚线箭头可能有精度的损失

    5.1 自动转换

    条件(需要2个条件同时满足):

    • 转换前的数据类型与转换后的数据类型兼容
    • 转换后的数据类型的表示范围比转换前的大

    补充:任何类型的数据都可向 String 类型转换

    • 例:
    System.out.println( "1 + 2 = " + 1 + 2 );
    System.out.println( "1 + 2 = " + ( 1 + 2 ) );
    
    • 输出:
    1 + 2 = 12
    1 + 2 = 3
    

    5.2 强制转换

    (欲转换的类型) 变量名称
    double x = 9.997;
    int nx = (int) x; // 变量nx的值为 9。强制类型转换通过截断小数部分将浮点值转换为整型。
    

    如果想对浮点数进行四舍五入运算,那就需要使用Math.round方法:

    double x = 9.997;
    int nx = (int) Math.round(x); // 现在,变量 nx 的值为10。当调用 round 的时候,仍然需要使用强制类型转换(int)。其原因是round 方法返回的结果为 long 类型,所以只有使用显式的强制类型转换才能够将 long 类型转换成 int 类型。
    
  • 相关阅读:
    SQLAlchemy使用说明之ORM
    Python日志模块logging
    Python正则表达式模块re
    group by 小结
    Hive Beeline 官方文档学习
    在MySQL中创建cm-hive使用的数据库及账号
    MySQL导入数据错误error: 13 及解决办法
    Yum 安装并设置 MySQL
    使用xshell5 从CentOS主机download资料
    Bootstrap 学习
  • 原文地址:https://www.cnblogs.com/hiwangzi/p/7602225.html
Copyright © 2011-2022 走看看