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返回该数据类型最小值和最大值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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); 
    }
}

运行结果:

1
2
3
4
5
6
7
8
9
基本类型: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

举例说明:

1
2
3
4
5
6
7
8
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));
    }
}

运行结果:

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

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

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

运行结果:

1
2
maxValue + 1 = 2147483648
minValue - 1 = -2147483649

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

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

1
2
3
long num = 2147483648L;
int result  = (int) num;
System.out.println(result);<br>运行结果:-2147483648

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

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

运行结果:

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

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

1
2
3
4
5
6
7
8
9
10
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范围中都需要强转。

1
2
3
4
5
6
7
8
9
10
11
//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之间的转换

1
2
3
4
5
6
7
8
9
10
//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 @   江南大才子  阅读(2629)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
历史上的今天:
2020-06-22 ArrayList去重及排序
2020-06-22 MyBatis---动态SQL及关联映射
点击右上角即可分享
微信分享提示