Java的8大基本数据类型 -- (byte,short,int,long,float,double,boolean,char)

Java8大基本数据类型

byte(字节型)、short(短整型)、int (整型) 、long(长整型)、float(单精度浮点型)、double(双精度浮点型)、boolean(布尔型)、char(字符型)

数值型
整型
  • Byte

Byte数据类型是8位
取值范围:(-128 - 127)
默认值:0
byte a= 100; byte b = -20;

  • short

short数据类型是16位
取值范围:(-2^15 - 2^15 -1)
默认值:0

  • int

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

  • long

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

在Java中任何一个整型常量均为int类型!

浮点型
  • float

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

  • double

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

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

字符型
  • char

一般用于描述中文(基本忽略)
取值范围:(\u0000 - \uffff) —>(0 - 65535);
字符型用’ '表示;char ch = ‘A’;
char和int可以相互转换,char转int直接赋值,int 转char强转。

布尔型
  • boolean

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

对于数据类型的基本类型的取值范围,不需要强记,因为它们的值都已经以常量的形式定义在对应的包装类中了。

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);
        System.out.println();

        // short  
        System.out.println("基本类型:short 二进制位数:" + Short.SIZE);  
        System.out.println("包装类:java.lang.Short");  
        System.out.println("最小值:Short.MIN_VALUE=" + Short.MIN_VALUE);  
        System.out.println("最大值:Short.MAX_VALUE=" + Short.MAX_VALUE);  
        System.out.println();  
  
        // int  
        System.out.println("基本类型:int 二进制位数:" + Integer.SIZE);  
        System.out.println("包装类:java.lang.Integer");  
        System.out.println("最小值:Integer.MIN_VALUE=" + Integer.MIN_VALUE);  
        System.out.println("最大值:Integer.MAX_VALUE=" + Integer.MAX_VALUE);  
        System.out.println();  
  
        // long  
        System.out.println("基本类型:long 二进制位数:" + Long.SIZE);  
        System.out.println("包装类:java.lang.Long");  
        System.out.println("最小值:Long.MIN_VALUE=" + Long.MIN_VALUE);  
        System.out.println("最大值:Long.MAX_VALUE=" + Long.MAX_VALUE);  
        System.out.println();  
  
        // float  
        System.out.println("基本类型:float 二进制位数:" + Float.SIZE);  
        System.out.println("包装类:java.lang.Float");  
        System.out.println("最小值:Float.MIN_VALUE=" + Float.MIN_VALUE);  
        System.out.println("最大值:Float.MAX_VALUE=" + Float.MAX_VALUE);  
        System.out.println();  
  
        // double  
        System.out.println("基本类型:double 二进制位数:" + Double.SIZE);  
        System.out.println("包装类:java.lang.Double");  
        System.out.println("最小值:Double.MIN_VALUE=" + Double.MIN_VALUE);  
        System.out.println("最大值:Double.MAX_VALUE=" + Double.MAX_VALUE);  
        System.out.println();  
  
        // 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

基本类型:short 二进制位数:16
包装类:java.lang.Short
最小值:Short.MIN_VALUE=-32768
最大值:Short.MAX_VALUE=32767

基本类型:int 二进制位数:32
包装类:java.lang.Integer
最小值:Integer.MIN_VALUE=-2147483648
最大值:Integer.MAX_VALUE=2147483647

基本类型:long 二进制位数:64
包装类:java.lang.Long
最小值:Long.MIN_VALUE=-9223372036854775808
最大值:Long.MAX_VALUE=9223372036854775807

基本类型:float 二进制位数:32
包装类:java.lang.Float
最小值:Float.MIN_VALUE=1.4E-45
最大值:Float.MAX_VALUE=3.4028235E38

基本类型:double 二进制位数:64
包装类:java.lang.Double
最小值:Double.MIN_VALUE=4.9E-324
最大值:Double.MAX_VALUE=1.7976931348623157E308

基本类型: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)

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

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 = " + maxValue );
        System.out.println("minValue = " + minValue );
        System.out.println("maxValue + 1 = " + (maxValue + 1));
        System.out.println("minValue - 1 = " + (minValue - 1));
    }
}

运行结果:

maxValue = 2147483647
minValue = -2147483648
maxValue + 1 = -2147483648
minValue - 1 = 2147483647

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

		int maxValue = Integer.MAX_VALUE;
        int minValue = Integer.MIN_VALUE;
        long max = maxValue + 1L;
        long min = minValue - 1L;

运行结果:

maxValue = 2147483647
minValue = -2147483648
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是int,int的范围大于byte范围,理论上要进行强转,可是这里没有强转,因为数据在byte范围内,强转与不强转结果一样。
	    byte data = 10;
        System.out.println(data);
        

输出结果:10

但是int变量赋值给byte类型,必须强转

byte data = (byte)300;//300的二进制为1 0010 1100,经过强转后的data只有8位,所以data = 0010 1100 = 44

char与int之间的转换


		char c= 'A';
        int num = c + 32;//char可以直接转为int
        char x = (char) num;//int 要 强转到char
        System.out.println(x);

输出结果:a
**注意:**字符型数字(‘0’ - ‘9’)与int数字(0 - 9) 不同

if('0' == 0)一定是false

猜你喜欢

转载自blog.csdn.net/qq_39032310/article/details/83218192