当前位置: 首页 > Thinking in Java, 程序代码 > 正文

第3章_操作符_直接常量,类型,转换总结

总结:

  1. 111 这样的 表示int
  2. 1.5 这样的表示 double
  3. 给变量赋值不能超过其范围,比如一个byte变量aByte=222;不能通过编译
  4. 0123 这样的以0开头的整形表示 8进制
  5. 0xABCF 这样的以0x开头的表示 16进制
  6. 1.5F这样的表示 float的,也可以是 100F(涉及到自动转换了)
  7. 1.5D表示double类型的,也可以这样100D

 

测试代码:

package test.type;

/**
 * 基本类型有以下四种:
 * 
 * int长度数据类型有:byte(8bits) short(16bits) int(32bits) long(64bits)
 * 
 * float长度数据类型有:单精度(32bits float)、双精度(64bits double)
 * 
 * boolean类型变量的取值有:ture、false
 * 
 * char数据类型有:unicode字符,16位
 * 
 * 对应的类类型:Integer、Float、Boolean、Character、Double、Short、Byte、Long
 */
public class TestType
{
  public static void main(String[] args)
  {
    /**
     * byte(8bits),范围-2^8 ~ 2^7 即, -128 ~ 127
     */
    byte aByte = 1;
    //aByte = aByte + 1;
    /**
     * 上面这句编译出错,提示 不能把整形转换为 byte,因为 这里的1 是一个直接常量 1 默认是整形的(int)
     * 一个 int 和 一个 byte 相加 会自动提升 结果为 int的.
     * 即,向范围大的类型转
     */
    
    aByte = (byte) (aByte + 1);  //使用强制转换时可以的
    System.out.println(aByte);   // 输出 2
    
    aByte = (byte) (aByte + 129);// 超过byte范围的强制转换 结果就不对了
    System.out.println(aByte);   // 输出 -125
    
    aByte++;  //这样的可以执行
    System.out.println(aByte);   // 输出 -124
    
    aByte+=1; //这样也可以
    System.out.println(aByte);   // 输出 -123
    
    aByte = 0;
    for(int i=0;i<128;i++)   //加了128次,超过byte范围,结果也不对了.
    {
      aByte++;
    }
    System.out.println(aByte);   // 输出 -128
    
    aByte = 0;
    for(int i=0;i<128;i++)   //加了128次,超过byte范围,结果也不对了.
    {
      aByte+=1;
    }
    System.out.println(aByte);   // 输出 -128
    
    //aByte = 129; //这句报错, byte最大127,这里超范围赋值是不行的
    
    /**
     * short(16bits),范围 -2^16 ~ 2^15,即-32768 ~ 32767
     */
    short aShort = 0; //相关操作同上面byte的测试
    
    /**
     * int(32bits),范围 -2^32 ~ 2^31,即-2 147 483 648 ~ 2 147 483 647
     */
    int aInt = 0;     //相关操作同上面byte的测试
    
    /**
     * long(64bits) 范围 -2^64 ~ 2^63,即-9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807
     */
    long aLong = 0;  //这个0,是一个直接常量,其实是一个int ,以为long比int范围大,这样赋值没问题
    aLong = 100L;    //这个 100L在数字后面加上L表示long类型
    
    /********************************************************************************************/
    /**
     * float(32bits) 范围大约 ±3.402 823 47 E±38(有效位 6~7位)
     */
    float aFloat = 0; //0这个直接常量 其实是一个int,这里自动将int 转成float了,因为float比int 范围大
    System.out.println(aFloat);  // 输出0.0
    
    aFloat = 1.5F;    // 这里1.5F 是一个直接常量, 在一个浮点数后面加一个F表示flaot
    //aFloat = 2.5;   // 这样 不对,因为 2.5 这个直接常量 默认是 double的,
    
    aLong = 999L;
    aFloat = aLong;   //这样可以, 因为aLong也是32bits的,但是这里自动转换了 aLong 自动变成 aFloat了
    System.out.println(aFloat);  // 输出999.0
    
    /**
     * double(64bits) 范围大约 ±1.797 693 134 682 315 70 E±308(有效位 15位)
     */
    double aDouble = 123; //123这个直接常量 其实是一个int,这里自动将int 转成doble了,因为doubl比int 范围大
    System.out.println(aDouble);  // 输出123.0
    
    aDouble = 119.025D; //119.0D 这个直接常量表示 一个double的
    System.out.println(aDouble);  // 输出 119.025
    
    aInt = 123456;
    aDouble = aInt; // 可以这样赋值
    System.out.println(aDouble);  // 输出 123456.0
    
    aFloat = 222.11F; //这里 F必须要有的,因为 光光的222.0其实是一个double,不能赋给float
    aDouble = aFloat;
    System.out.println(aFloat);  // 输出 222.11,注意这里是float,看起来还比较正常(是正常赋值)
    System.out.println(aDouble); // 输出222.11000061035156, 222.11F这个float动态转换成 double后,精度变了
    
    aDouble = 222.11D;  // double 正常赋值呢?
    System.out.println(aDouble); // 输出 222.11, 正常了
    
    /********************************************************************************************/
    /**
     * char 表示单个字符.是Unicode编码的,范围是\u0000 到 \uffff
     * 采用的是UTF16编码,
     * 关于字符和编码和char,参见单独文章:
     * http://jackyin5918.iteye.com/blog/1883383
     */
    char aChar = '\u005D';
    System.out.println(aChar); //输出 [
    aInt = 0;
    for(char c='\u0000';c<'\uffff';c++)
    {
      aInt++;
    }
    System.out.println(aInt); // 输出 65535
    
    /**********************************************************************************************/
    aInt = 010;// 0 开头的表示8进制数
    System.out.println(aInt); // 输出 8 (转换成10进制的了)
    
    aInt = 0x10;// 0 开头的表示 16 进制数
    System.out.println(aInt); // 输出 16 (转换成10进制的了)
    
    //没有 可以表示 二进制的符号 比如 101010B这样的
    
    System.out.println(Integer.toHexString(aInt));    //将一个整转换 为 16进制 数, 然后输出 10 
    System.out.println(Integer.toBinaryString(aInt)); //将一个整转换 为 8 进制 数, 然后输出 10000
    System.out.println(Integer.toOctalString(aInt));  //将一个整转换 为 2 进制 数,  然后输出 20
  }
}

 

赞 赏

   微信赞赏  支付宝赞赏


本文固定链接: https://www.jack-yin.com/coding/19.html | 边城网事

该日志由 边城网事 于2013年06月06日发表在 Thinking in Java, 程序代码 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: 第3章_操作符_直接常量,类型,转换总结 | 边城网事
关键字: ,

第3章_操作符_直接常量,类型,转换总结 暂无评论

发表评论

快捷键:Ctrl+Enter