zoukankan      html  css  js  c++  java
  • 04-数据类型转换

    Java程序中要求参与的计算的数据,必须要保证数据类型的一致性,如果数据类型不一致将发生类型的转换。

    隐士转换(自动类型转换)

    自动转换:将 取值范围小的类型 自动提升为 取值范围大的类型 。

    public static void main(String[] args) {
        int i = 1;
        byte b = 2;
        // byte x = b + i; // 报错
        //int类型和byte类型运算,结果是int类型
        int j = b + i;
        System.out.println(j);
    }
     

    运算结果,变量的类型将是 int 类型,这就是出现了数据类型的自动类型转换现象。

    byte 类型内存占有1个字节,在和 int 类型运算时会提升为 int 类型 ,自动补充3个字节,因此计算后的结果还是 int 类型。

    同理,当一个 int 类型变量和一个 double 变量运算时, int 类型将会自动提升为 double 类型进行运算。

    public static void main(String[] args) {
        int i = 1;
        double d = 2.5;
        //int类型和double类型运算,结果是double类型
        //int类型会提升为double类型
        double e = d+i;
        System.out.println(e);
    }

    转换规则:

    范围小的类型向范围大的类型提升, byte、short、char 运算时直接提升为 int 。

    byte、short、char‐‐>int‐‐>long‐‐>float‐‐>double

    强制类型转换

    将 1.5 赋值到 int 类型变量会发生什么?产生编译失败,肯定无法赋值

    int i = 1.5; // 错误

    double 类型内存8个字节, int 类型内存4个字节。 1.5 是 double 类型,取值范围大于 int 。

    想要赋值成功,只有通过强制类型转换,将 double 类型强制转换成 int 类型才能赋值。

    强制类型转换:将 取值范围大的类型 强制转换成 取值范围小的类型 。

    自动转换是Java自动执行的,而强制转换需要我们自己手动执行。

    转换格式:

      数据类型 变量名 = (数据类型)被转数据值;

    // double类型数据强制转成int类型,直接去掉小数点。
    int i = (int)1.5;

    同理,当一个 short 类型与 1 相加,我们知道会类型提升,但是还想给结果赋值给short类型变量,就需要强制转换。

    public static void main(String[] args) {
         //short类型变量,内存中2个字节
         short s = 1;
         /*
           出现编译失败
           s和1做运算的时候,1是int类型,s会被提升为int类型
           s+1后的结果是int类型,将结果在赋值会short类型时发生错误
           short内存2个字节,int类型4个字节
           必须将int强制转成short才能完成赋值
         */
         s = s + 1;//编译失败
         s = (short)(s+1);//编译成功
    }

    注意:

      浮点转成整数,直接取消小数点,可能造成数据损失精度。
      int 强制转成 short 砍掉2个字节,可能造成数据丢失。

    // 定义s为short范围内最大值
    short s = 32767;
    // 运算后,强制转换,砍掉2个字节后会出现不确定的结果
    s = (short)(s + 10);

    byte b;
    b = 3;
    b = b*3;java会自动做类型提升,将b自动提升为int,因此,会发生错误。
    b = (byte)b*3;这样,但是还是报错,因为强制类型转换比乘法优先级高。
    b = (byte)(b*3);应该这样。

    ASCII码表

    对于字符来说,存储的时候,会转为对应的ascII码来进行存储的。
    因此,字符在计算机中的表示都是以整数来进行表示的。

    public static void main(String[] args) {
      //字符类型变量
      char c = 'a';
      int i = 1;
      //字符类型和int类型计算
      System.out.println(c+i);//输出结果是98
    }

    ASCII( American Standard Code for Information Interchange 美国标准信息交换码)。

    在char类型和int类型计算的过程中,char类型的字符先查询编码表,得到97,再和1求和,结果为98。

    实际就是char类型提升为了int类型(自动类型转换)。char类型内存2个字节,int类型内存4个字节。

    ASCII码表

     

    java中1.3这种认为是double类型的,因此,1.3f这样表示1.3是float类型的。
    c中非0即为真,因此可以while(1)这样,但是java中不行,java只能while(true)这样。


  • 相关阅读:
    node.js 安装后怎么打开 node.js 命令框
    thinkPHP5 where多条件查询
    网站title中的图标
    第一次写博客
    Solution to copy paste not working in Remote Desktop
    The operation could not be completed. (Microsoft.Dynamics.BusinessConnectorNet)
    The package failed to load due to error 0xC0011008
    VS2013常用快捷键
    微软Dynamics AX的三层架构
    怎样在TFS(Team Foundation Server)中链接团队项目
  • 原文地址:https://www.cnblogs.com/Leo101018/p/13809269.html
Copyright © 2011-2022 走看看