zoukankan      html  css  js  c++  java
  • Java的8大基本数据类型

    Java8大基本数据类型

      byte(字节型)、short(短整型)、int (整型) 、long(长整型)

      float(单精度浮点型)、double(双精度浮点型)、boolean(布尔型)、char(字符型)

    整型  

      byte数据类型是8位, 1个字节,默认值:0,取值范围:(-128 - 127);

      short数据类型是16位,两个字节,默认值:0,取值范围:(-2^15 - 2^15 -1);

      int 数据类型是32位,4个字节,默认值:0,取值范围:(-2^31 - 2^31 -1)

      long数据类型是64位,八个字节,默认值:0L,整型常量若要声明为long类型,需要在数字后加上l或L,long a = 10000L;

    浮点型

      float数据类型是单精度、32位浮点数;默认值:0.0f,若要定义float类型的变量需要在小数后面追加f或者F,float a= 2.3f;

      double数据类型是双精度、64位、符合IEEE 754标准的浮点数;默认值:0.0d,double d = 2.3;

      描述整数默认用int,描述小数默认用double。long一般用于描述日期、时间、内存、文件大小,IO处理一般使用byte

    字符型

      char一般用于描述中文(基本忽略),取值范围:(u0000 - uffff) —>(0 - 65535);,字符型用’ '表示;char ch = ‘A’,

      char和int可以相互转换,char转int直接赋值,int 转char强转。

    布尔型

      boolean表示一位的信息,只有两个取值:true和false,默认值:false

    每个数据类型对应的包装类中都有对应的SIZE属性返回位数,MIN_VALUE和MAX_VALUE返回该数据类型最小值和最大值。

    public class PrimitiveTypeTest{
        public static void main(String[] args){
            //byte
            System.out.println("基本类型:byte 二进制位数:" + Byte.SIZE);
            System.out.println("包装类:java.lang.Byte");
            System.out.println("最小值:Byte.MIN_VALUE = " + Byte.MIN_VALUE);
            System.out.println("最大值: Byte.MAX_VALUE = " + Byte.MAX_VALUE);
    
            // char  
            System.out.println("基本类型:char 二进制位数:" + Character.SIZE);  
            System.out.println("包装类:java.lang.Character");  
            // 以数值形式而不是字符形式将Character.MIN_VALUE输出到控制台  
            System.out.println("最小值:Character.MIN_VALUE=" +(int)Character.MIN_VALUE);  
            // 以数值形式而不是字符形式将Character.MAX_VALUE输出到控制台  
            System.out.println("最大值:Character.MAX_VALUE="+(int) Character.MAX_VALUE);  
        }
    }   

    运行结果:

    基本类型:byte 二进制位数:8
    包装类:java.lang.Byte
    最小值:Byte.MIN_VALUE = -128
    最大值: Byte.MAX_VALUE = 127
    
    基本类型:char 二进制位数:16
    包装类:java.lang.Character
    最小值:Character.MIN_VALUE=0
    最大值:Character.MAX_VALUE=65535

    Float和Double的最小值和最大值都是以科学计数法的形式输出的,结尾的“E + 数字"表示E之前的数字要乘以10的多少次方。

    eg:1.4E-45 —> 1.4 ✖ 10^(-45)

    数据类型转换必须满足如下规则:

      1.不能对boolean类型进行类型转换

      2.不能把对象类型转换成不相关类的对象

      3.小的数据类型与大的数据类型做数值运算时,小的数据类型会自动提升为大的数据类型。

      4.大的数据类型要转为小的数据类型必须强转,强转可能会丢失数据。

      5.浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入

      低级--------> 高级
      byte,short,char->int->long->float->double

    举例说明:

    public class Test{
        public static void main(String[] args){
            int maxValue = Integer.MAX_VALUE;
            int minValue = Integer.MIN_VALUE;
            System.out.println("maxValue + 1 = " + (maxValue + 1));
            System.out.println("minValue - 1 = " + (minValue - 1));
        }
    }

    运行结果:

    maxValue + 1 = -2147483648
    minValue - 1 = 2147483647

    上述结果说明int型存在数据溢出问题,解决方案只有一个:更换数据类型,使用long来解决数据溢出问题:

    long max = maxValue + 1L;
    long min = minValue - 1L;

    运行结果:

    maxValue + 1 = 2147483648
    minValue - 1 = -2147483649

    因为程序执行顺序是从右边到左边,所以这里在定义long类型变量时要给运算数字后面加L,不然运算结果还是int型发生溢出。

    大的数据类型转为小的数据类型,必须强转,但有时会丢失内容

    long num = 2147483648L;
    int result  = (int) num;
    System.out.println(result);
    运行结果:-2147483648

    关于数据默认值,默认值在主方法中无效

    public class Test{
        public static void main(String[] args){
            int num ;//定义一个整型变量但并未初始化
            System.out.println(num);
        }
    }

    运行结果:

     错误: 可能尚未初始化变量num
           System.out.println(num);
                              ^
    1 个错误

    这个时候有两种解决方案,一种是在使用前进行赋值,另一种是在定义变量时赋值。

    class InitTest{
        public int a;
    }
    
    public class Test{
        public static void main(String[] args){
            InitTest test = new InitTest();
            System.out.println(test.a);
        }
    }

    byte与int之间的转换

      整型常量值如果在byte类型的保护范围之内,可以直接赋值给byte变量,无须强转;

      整型常量值如果超出byte范围必须强转,以及整型变量无论值是否在byte范围中都需要强转。

    //10在byte范围内,强转与不强转结果一样。
    byte data = 10;
    System.out.println(data);
    输出结果:10
    
    //int变量赋值给byte类型,必须强转
    byte data = (byte)300;
    输出结果:44
    
    解析:300的二进制为1 0010 1100,经过强转后的data只有8位,
             所以data = 0010 1100 = 44    

    char与int之间的转换

    //char直接转为int 
    char c= 'A';
    int num = c + 32;
    System.out.println(num);
    
    //int需要强转到char
    char x = (char) num;
    System.out.println(x);
    
    输出结果:97  和 a

    补充:ASCII码中65~90为26个大写英文字母,97~122号为26个小写英文字母

    注意:字符型数字(‘0’ - ‘9’)与int数字(0 - 9) 不同,if('0' == 0)一定是false

    我话讲完!谁赞成?谁反对?
  • 相关阅读:
    UE4.7的IOS发布和调试的相关问题
    【翻译】CEDEC2015 速成Albedo Chart 制作
    【翻译】KNACK制作介绍
    【翻译】口袋妖怪X/Y 制作技法
    【翻译】圣斗士星矢:圣域传说 制作介绍 特效合成等
    【翻译】圣斗士星矢:圣域传说 制作介绍 场景篇
    Linux 磁盘管理
    linux 文件系统
    Ubuntu18.04系统安装与设置
    C#(99):lazy延迟加载
  • 原文地址:https://www.cnblogs.com/wffzk/p/14920724.html
Copyright © 2011-2022 走看看