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

posted @ 2021-06-22 23:03  江南大才子  阅读(2559)  评论(0编辑  收藏  举报