Java 数据类型: 分为引用类型和基本数据类型 

  1) 基本数据类型: 8种 

    byte, short, int, long 

    float, double  

    char 

    boolean 

  2) 整数类型  byte, short, int, long, 都是有符号(补码)整数 

   byte   8位补码     最大值 0x7f  127  最小值 0x80 -128 

   short 16位有符号数 0x7fff 32767  0x8000 -32768 

   int   32位         0x7fffffff 2G-1 2^31-1 21亿 0x80000000 -2G  

   
int的精度是32位,范围是-2^(32-1)~2^(32-1)-1 

   long  64位 .... 

   
long的精度是64位,范围是-2^(64-1)~2^(64-1)-1 

   整数字面量(直接量) 默认是int类型, 如果不超出范围, 可以给 

   小类型变量直接赋值. 

   使用整数类型(byte, short, int) 要注意取值范围, 超范围运算 

   java 底层byte,short 按照32位计算 

    

   long 类型的字面量使用"L","l" 后缀 

    

  3) 浮点数, 小数 (不必掌握 浮点数的存储方式) 

   IEEE 754  

   浮点数原理: 10进制浮点数(科学计数法)原理 

     2356189. = 235618.9 * 10 

              = 23561.89 * 10^2 

              = 2356.189 * 10^3 

              = .2356189 * 10^7 

   概念: 尾数: .2356189 (精度) 

        指数: 7 (范围) 

        基数: 10 

     

    3.14 * 100 (范围大) 

    3.1415926535 (精确) 

     

   pi = 3.14 

        3.1415926535897932384626433 

    

         

   二进制浮点数: 

     101001010101. = 10100101010.1 * 2 

                   = 1010010101.01 * 2^10 

                   = 101001010.101 * 2^11  

                   = .101001010101 * 2^1100 

   概念: 尾数(有效尾数): .101001010101 

        指数: 1100 

        基数: 2 

         

  float: 32位 其中: 1位符号位, 8位指数, 23位尾数 

float为单精度浮点型,其精度也就是其尾数,23 位 

其表示数值的范围也就是其指数位 

-2^(2^(8-1))~2^(2^(8-1))-1 

 

   int max = 01111111 11111111 11111111 11111111 

   float f = 1.111111 11111111 11111111 1 * 2^00011110 

   

  double: 64位 其中: 1位符号位, 11位指数, 52位尾数 

  double为双精度浮点型,其精度也就是其尾数,52 位 

  其表示数值的范围也就是其指数位 

-2^(2^(11-1))~2^(2^(11-1)) 

   

  浮点数的字面量: 默认是double, D d 后缀是double, f F 是float 



在这里需要说的是,经常有提到int,long,float,double这些数据类型之间 

 
的数值范围或精度作比较,所以今天在这里也对此做一个归纳:
(数值范围所表示的是2的次幂数)
 
数值范围(由小到大):int(+/-(32-1)),long(+/-(64-1)),float(+/-2^(8-1)),double(+/-2^(11-1)) 

精度(由小到大):float(23),int(31),double(52),long(63) 

 

   

  4) 字符类型 char, 字符是一个16位无符号整数, 是一个二进制数 

    数值是一个字符的unicode编码值.  

    unicode 编码: 是全球范围内的编码方法, 编制了英文, 中,日,韩 

    阿拉伯, 希伯来, ..... 8万+ 字符 

    其中英文部分与ASCII 兼容, 英文字符和数字是连续编码的. 

     

    中: 20013  田:30000 

     

     

    ASCII: 0~128 

    Java char 的范围 0~65535 不能表示全部unicode 但是可以表示 

    unicode只能够最常用的部分 

     

    *最小值:0, 最大值:65535 = 2^16-1 

    *字符字面量使用单引号为定界符号:'中' == 20013 == 0x4e2d 

      字面量也是整数常量! 

      特殊字符采用转义字符表示: 

      如: '\n' '\t' '\\' '\b' '\r'  

         '\'' '\"'  '\u4e2d'  

     

      char c = '\\'; 

       

      'X' - 'A' = N 

      'x' - 'a' = N 

      X  = 'c' - 'a' + 'A' 

    

   5) boolean 布尔类型 表达: 真(true)/假(false) 

    建议使用长变量名定义变量 

    boolean started = true; 

    boolean isMan = true; //纯爷们! 

    isMan = false; 

    boolean used = true;//二手的 

    boolean married = false; 

    if(used){ 

     
 System.out.println("打八折");  

    } 

    不建议 定义没有意义的变量 

    boolean u = true;//u = you 

    boolean flag = false; 

     

    if(flag){ 

     
 System.out.println("打八折");  

    }   

     

    Person she; 

    Person he; 

    she.kill(he);    

     

    Person a; 

    Person b; 

    a.s(b); 

   

 4. 数据类型转换  

            char -> 

    byte -> short -> int -> long -> float -> double 

      

  1) 自动类型转换,正方向,小类型到大类型的转换会自动完成 

    符号位会自动扩展, 负数补1, 正数补0, 保证补码数值不变 

    注意, 整数到浮点数转换会损失精确度 

    自动类型转换也叫"隐式类型转换", 是自动发生的, 一般不需要处理 

    

    int i = -1; 

    long l = i; 

   

  2) 强制类型转换(显示类型转换), 需求明确处理, 是按照反方向,进行 

  的转换, 这种转换会溢出, 或者损失精度. 要注意数据的范围 

  int i = 128+256;// 00000000 00000000 00000001 10000000  

  byte b = (byte)i;//-128 

   

  long l=0xf80000000L; 

  int c = (int)l;//负数(long->int 为大类型向小类型,需强制转换) 

   

  long x=c;//小类型向大类型,隐式转换,不必强转 



  l = 8; 

  int d = (int)l; 

   

  float pi = (float)3.1415926535;//损失精度 

   

  char c = '0'; 

  char x = (char)(c+2);