首页 > 学院 > 开发设计 > 正文

Core Java 学习笔记——2.基本数据类型&类型转换

2019-11-14 21:48:55
字体:
来源:转载
供稿:网友
Core java 学习笔记——2.基本数据类型&类型转换
  • 数据类型(8种基本类型:int/short/long/byte/float/double/char/boolean)
    • 整型
      int4字节-2 147 483 648~2 147 483 647
      short2字节-32 768~32 767
      long8字节-9 223 372 036 854 775 808~9 223 372 036 854 775 807
      byte1字节-128~127

      • 长整型(long)数值后加后缀L (e.g. 4000000000L)
      • 二进制数(BIN):前缀0b (e.g. 0b10012=910 )
      • 八进制数(OCT):前缀0 (e.g. 0108=810 )
      • 十六进制(HEX):前缀0x ( e.g. 0xCAFE16=5196610 )
      • 在Java中,整型的范围与运行Java代码的机器无关,保障了Java的可移植性。在C中,在16/32/64位系统下的整型所占字节不尽相同:short(2Byte)<=int(2/4Byte)<=long(4/8Byte)
      • Java 7之后,可以在数字之间加入“_”增加易读性(编译器将无视下划线) (e.g. 2_000_000)
      • Java没有 无符号类型(unsigned)

    • 浮点类型
      float4字节有效数字6~7位
      double8字节有效数字15位

      • float类型数值加后缀F (e.g. 3.14F) 没有后缀F的浮点数值(e.g. 3.14)默认为double类型

    • char类型
      • char数据类型是一个采用UTF-16编码表示Unicode代码点的代码单元。(具体关于UTF-16、Unicode代码点、代码单元的内容于下一节讲述)
      • char类型用于表示单个字符,通常用来表示字符常量。(e.g. ‘A’是编码为65所对应的字符常量,“A”则是一个包含字符‘A’的字符串)
      • 转义序列符
        /b退格
        /t制表
        /n换行
        /r回车
        /”双引号
        /’单引号
        //反斜杠
      • 我自己也看晕了,下一节深入讨论Java中char的前生今世

    • boolean类型
      • boolean类型(布尔)有两个值:false和true,用于判定逻辑条件。整型值与布尔值不能进行相互转换(一般情况下)。
      • C中,值0相当于boolean中的false,非0值则为true。因而在下面代码中,C中由于表达式“x=0”的值为0,所以其结果判断为false。而在Java中,将无法通过编译,因为表达式“x=0”的值不能转换为boolean值。(插多一句,在C/C++编程中,判断语句中,将“x==0”改写为“0==x”可以很好的解决有时候漏写一个‘=’的问题)
        if (x = 0)

  • 数据类型转换
    • clip_image001[4]
    • 图中实心箭头表示无信息丢失的转换,虚线箭头表示可能有精度损失的转换。(e.g. 123 456 789(int)是一个大整数,所包含的位数多过float类型所能表达的位数(有效数字6~7位),当此整型数值转换为float类型时,将得到同样大小的结果,但损失了一定的精度(小数后几位无法精确表达))
    • 二元操作时(具有两个操作数,e.g. n+f )自动类型转换优先级: double>float>long>int(如果有,则向更高优先级转换,最低也转换为int)

  • 强制数据类型转换(cast)
    • 有可能损失精度
    • 强制类型转换中,浮点数值转换为整型通过截断小数部分,变量nx的值为9。
    double x = 9.997;int nx = (int) x;
    • 如果想对浮点数进行四舍五入运算,需使用Math.round方法,此时变量nx值为10。另外,Math.round()返回结果的long类型,所以还需要进行强制类型转换为int类型。
    double x = 9.997;int nx = (int) Math.round(x);
  • 当将一个数值从一种类型转换为另一种类型时,而又超出了目标类型的表示范围(long->int),那么将截断成一个完全不同的值(e.g. (byte)300 –> 44)


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表