JavaSE学习笔记——数据类型

java中的数据类型

分类
1. 基本数据类型:java中有八种基本数据类型
2. 引用类型/对象类型:对象[本文暂不讨论]

基本数据类型

  1. 整 型:byte,short,int,long
  2. 浮动型:float,double
  3. 字符型:char
  4. 布尔型:boolean

整型

  1. 特征
关键字名称bit位字节数精度
byte字 节8位1[-128,127]
short短整型16位2[-2的15次方,2的15次方-1]
int整 型32位4[-2的31次方,2的31次方-1] 大约20亿
long长整型64位8很大

2. 进制转换
- 计算机基础:计算底层只能识别二进制(0,1),计算采用最高做数据的符号位,0表示正数,1 表示负数
* 长度为8位的byte
* 最大值:0111 1111 采用8421码转十进制: 127
* 最小值:1000 0000 : -128
* 最高位为1的二进制转十进制: 1111_1111
* 按位取反: 0000_0000 0111 1111
* 加1 : 0000_0001 1000 0000
* 更具8421码计算结果 1: 128
* 添加负数-1: -128

  1. 对于整数的字面量[直接量]默认就是int类型,默认采用十进制

    • 十进制:整数默认就是,直接输出整型变量默认就是十进制
    • 八进制:整数如果采用零开头
    • 十六进制:整数使用0x/0X开头 [a,f]/[A,F]表示[10,15]
    • 二进制:jdk7.x以后提供0B/0b表示二进制
    • 在jdk7.x以后可以使用_作为字面量的分隔符提高阅读效率
  2. 进制的转换

    • 十进制和二进制的转换:采用8421码,如果是负数或者二进制最高位为1的需要处理
    • 二进制转八进制:从右向左,每三位为一组,最后不足三位高位使用零补
    • 二进制转十六进制:从右向左,每四位为一组,最后不足四位高位使用零补
byte

特点:长度为8个bit,范围[-128,127].描述一个字节
1. 如果整数的直接量在byte的范围中,那么JVM可以自动将直接量从int类型转成byte类型
2. 如果整数的直接量超出了byte范围,编译报错.JVM认为byte无法兼容int类型.
3. byte的底层采用int类型进行计算
4. short与byte的特征一致,short的底层也是采用int类型计算

   //整数的字面量(直接量)默认为int类型
   byte b=12;//将12赋值给类型为byte的变量b

   byte d=128;//编译报错

   int i=12;
   //JVM编译到此行时,只能识别出变量i的类型为int,认为int类型无法直接转成byte类型
   byte c=i;//编译报错
TestByte.java:13: 错误: 不兼容的类型: 从int转换到byte可能会有损失
            byte c=128;
                   ^
1 个错误
原因:直接量超出了byte的范围.编译报错
long

特点:64位,精度高.可以在直接量后面使用l/L指定直接量的类型为long类型

        int intMax=0x7fff_ffff;
        System.out.println(intMax);//2147483647

        //long l1=2147483648;报错
        long l1=2147483648l;//l指定JVM应该采用long类型处理此直接量
        System.out.println("l1="+l1);
TestLong.java:12: 错误: 过大的整数: 2147483648
                 long l1=2147483648;
                         ^
1 个错误
原因:直接量为int,该数据已经超出了int的范围

浮点型

  1. float:32位,float类型的精度要小于int类型
  2. double:64位,精度大于int类型小于long类型
    注意:浮点型的精度是由尾数位决定,浮点型的基本构成符号位+尾数位+指数位
   0.12345x10的5次方   12345称为尾数,5称为指数,符号位,10叫权
double

特点:java中浮点型的字面量或者直接量默认为double类型.在浮点型的直接量后面使用d/D明确类型为double

   double d1=0.1;//0.1就是直接量,默认为dobule类型
   double d2=0.2d;
   double d3=1d;//直接将int类型转成了double
   //科学计数法
   double d4=0.1234E4;//0.1234x10的4次方.E大小写不敏感
   //int i1=1E4;科学计算法只能使用double类型.
   double d7=1.1/0;
   System.out.println(d7);//Infinity 正无穷

   double d8=-1.1/0;
   System.out.println(d8);//-Infinity 负无穷
   //如果除法中都是整数,那么在运行时会抛出一个ArithmeticException,除数不能为零

   int r=1/0;
   System.out.println(r);
float

特点:精度小于int,使用浮点型的直接量时必须提供f/F明确其类型为float类型.
1. 虽然float的精度小于int类型,但是可以直接将int类型的变量赋给float类型.即使超出了float的范围,那么进行估值.

    //float f=0.1;编译报错
    int max=2147483647;
    float f1=max;
    float f2=max-1;
    System.out.println("f1="+f1);//f1=2.14748365E9
    System.out.println("f2="+f2);//f2=2.14748365E9
TestDouble.java:19: 错误: 不兼容的类型: 从double转换到float可能会有损失
                float f=0.1;
                        ^
1 个错误
原因:浮点型的直接量为double类型,由于浮点型结构的复杂性.JVM不提供浮点型的默认转换.

注意:浮点型由于自身算法的问题,对于浮点型避免进行比较或者计算

    double d9=1.16;
    double da=d9-1;
    System.out.println("da="+da);//da=0.15999999999999992

字符型 char

特点:java中使用单引号表示字符.由于计算机底层只能识别二进制.字符型的处理底层依旧采用int类型.将每一个字符对应一个整数.描述字符和整数对应关系的表称为字符编码(ASCII编码最早的字符编码表).java中字符型采用16位的无符号整数进行描述可以描述(65536个字符)

ASCII
字符整数字符整数字符整数
a97A65048
b98B66149
c99C67250
    //声明一个字符型
    char a='a';
    //由于字符底层采用int类型
    int  i='a';
    System.out.println("字符a="+a);//a
    System.out.println("整数i="+i);//97
    /*
     * 由于中文的字符编码存在不统一的状态该值的输出根据不同的编码会不同
     * 常使用的中文编码 utf-8/gbk 
     */
    int h='好';
    System.out.println("好="+h);//好=22909    

布尔类型 boolean

概念:java中唯一表示真假的类型.值只能是true/false

    boolean flag=true;

基本数据类型转换

自动类型转换

原则:将小的类型向大的类型转换的过程

   # 小类型到大类型的方向
   # 注意:整型向浮点型转换的过程中可能存在精度的丢失.
   byte->short->int->long->float->double
         char ->
    int max=0x7fff_ffff;
    float f=max;//将int类型赋值给float类型
    //精度已经丢失
    System.out.println("f="+f);//f=2.14748365E9  

强制类型转换

原则:将范围大的类型向小的类型转换,语法:(type)变量;

  double->float->long->int->short->byte
    float f1=1.2f;
    int i2=(int)f1;//将float类型强转成int类型
    System.out.println("i2="+i2);//1,小数部分被抹去

    int i3=128;
    byte b1=(byte)i3;
    //数据发生了溢出
    System.out.println("b1="+b1);//-128

    byte b2=1;
    byte b3=2;
    //由于底层byte采用int,需要将计算的结果转成byte
    byte b4=(byte)(b2+b3);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值