Java基本数据类型

215 阅读8分钟

今天开始更新Java基础知识相关的博客,目前来说对于Java可谓是一无所知,所以只能从最基础的学习,文章主要内容包括,基本数据类型讲解、数据类型转换。

在 Java 中类型总共氛围两大类,分别是基本数据类型和引用数据类型,在基本数据类型中又分为数字类型,字符类型和布尔类型。引用类型费为数组、类和接口三种。

Java共有八种基本数据类型,在 Java 中每种基本数据类型的内存占用大小是大不相同的,这些大小不会像其他一些语言那样随着机器环境的变化而随之发生变化,而是当声明了对应的类型之后则会在内存中开辟一块来存储该值。

基本数据类型

Java 基本类型分别是 byteshortintlongflotdoublecharboolean。我根据我的理解又把这八种数据类型分为了整数类型,浮点类型和其他类型。

整数类型

byte

byte是Java中基本的存储数据类型,byte即字节的意思,是Java中的基本类型,存储字节用,后面还会用到字节数组,再字节流的时候。

存储大小取值范围初始化默认值包装类型
1字节(8位)-128(-27)~127(27-1)0Byte

通过这种方法创建的 Byte 对象,可以表示指定的 byte 值。例如,下面的示例将 5 作为 byte 类型变量,然后再创建 Byte 对象。

byte b1 = 127; 
byte b2 = -128;

通常在读取非文本文件时(如图片,声音,可执行文件)需要用字节数组来保存文件的内容,在下载文件时,也是用byte数组作临时的缓冲器接收文件内容。所以说byte在文件操作时是必不可少的,不管是对文件写入还是读取都要用到。

short

short为短整型数据类型是16位,是Java原始整数数据类型。字节变量的值可以分配给短(short)变量,因为字节数据类型的范围落在短(short)数据类型的范围内。

存储大小取值范围初始化默认值包装类型
2字节(16位)-32768(-215)~32767(215-1)0Short
short minShort = -32768;
short maxShort = 32767;

Short 类是 short 原始类型的包装对象类。它定义代表此类型的值的范围的 MIN_VALUE 和 MAX_VALUE 常量。

int

int数据类型是32位有符号Java原语数据类型,int数据类型的变量需要32位,int表示的就是定义整型数据。Integer是对int进行了封装的一个类。

存储大小取值范围初始化默认值包装类型
4字节(32位)-22147483648(-231)~22147483647(231-1)0Integer
int intNum1 = 123;
int intNum2 = 456;

声明为int的变量不需要实例化,声明为Interger的变量需要实例化。

long

long数据类型是64位有符号Java原始数据类型,当对整数的计算结果可能超出int数据类型的范围时使用。

存储大小取值范围初始化默认值包装类型
8字节(64位)-263~263-10Long

long的范围内的所有整数称为long类型的整数字面量。 long类型的整数常数总是以L或小写l结尾。

long longNum1 = 4L;
long longNum2 = -1L;

long类型的整数字面量可以用八进制,十六进制和二进制格式表示。

long long1 = 25L; // 十进制
long long2 = 031L; // 八进制
long long3 = 0X19L; // 十六进制
long long4 = 0b11001L; // 二进制

从int到long的赋值是有效的,因为可以存储在int变量中的所有值都可以存储在long变量中。然而,相反的是不是真的。不能简单地将存储在long变量中的值分配给int变量,存在值溢出的可能性。

浮点类型

float

flot在Java中用来存储单精度类型,单精度数是指计算机表达实数近似值的一种方式。

存储大小取值范围初始化默认值包装类型
4字节(32位)符合IEEE754标准的浮点数0.0fFloat

float类型的整数常数总是以F或小写f结尾。

float floatNum1 = 3.14f;
float floatNum2 = 3.14F;

double

flot在Java中用来存储双精度类型,双精度浮点数是使用的一种数据类型,使用64位(8字节)来存储一个浮点数。

存储大小取值范围初始化默认值包装类型
8字节(64位)符合IEEE754标准的浮点数0.0dDouble
double doubleNum1 = 3.14159268798;
double doubleNum2 = 3.14159268798;

float或doble如果整数位为0的话,可以省略不写

其他类型

char

char类型最初用于表示Unicode字符集中的一个字符,但随着Unicode的发展,Unicode字符需要使用一个代码单元表示,有些Unicdoe字符需要两个代码单元表示。

存储大小取值范围初始化默认值包装类型
2字节(16bits)Unicode 0 ~ Unicode 216 -1(本质也是数值)nullCharacter
char c1 = "掘";
char c2 = "金";

char类型用于描述一个代码单元。对于基本的多语言平面中的字符可以使用一个代码单元表示,也就是一个char值。对于其他平面的字符可以使用两个代码单元表示,也就是两个char值。

boolean

boolean类型很简单,只有两个值分别是true和false。

存储大小取值范围初始化默认值包装类型
1字节(8位)/ 4字节(32位true/falsefalseBoolean

二进制存储(附加)

对基本类型已经有了一定的了解,大家发现在上述所有的表格中都会有存储大小,那这个存储大小又是如何计算的呢?我们通常使用到的硬盘存储空间都是以G为单位的。存储单位根据如下规则换算。

1T = 1024G
1G = 1024M
1M = 1024kb
1kb = 1024b
1b(byte) = 8位

那么为什么1b在存储空间中需要占8位呢?计算机只能识别两个数0和1,在硬盘中想要存储数值需要存储为2进制,如下表:

第1位第2位第3位第4位第5位第6位第7位第8位
符号位:0表示整数,1表示负数进制数进制数进制数进制数进制数进制数进制数

如果在地图中想要表示1,那么存储的时候则是00000001,如果是7的话则是00000111。把00000111换算成公式就是:1 + 2 + 4 = 7

类型转换

Java所有的数据类型变量可以相互转换,如果系统支持把某种基本类型的值直接赋值给另一种基本类型的变量,则这种方式被称为自动类型转换,当一个表述范围小的数值或变量赋值给另一个表述防伪大的变量时,系统将可以进行自动类型类型转换,否则则需要及使用强制类型转换。

自动类型转换

自动类型转换也称为隐式类型转换,自动转型转换遵循如下规则。

byte -> short/char -> int -> long -> float -> double

byte bNum = 56;
int iNum = bNum;

当执行上述代码的时候,程序是可以正常执行的,在上面的基础类型中,byte作为最基础的数据类型,取值范围是-128(-27)~127(27-1),而int类型的取值范围是-22147483648(-231)~22147483647(231-1)所以byte类型可以直接赋值给int类型的变量,此过程存在自动类型转换。

强制类型转换

Java中类型大的变量可以接受类型小的变量的赋值。但是类型小的变量接收类型大的变量的赋值的时候,系统为了防止数据丢失,就会报错。当进行操作时,代码需要经过一定的格式处理,不能自动完成。

比如将数据从高精度数据类型转换为低精度数据类型。但是高精度类型不能直接赋值给低精度类型,则会报错,会导致精度丢失。要完成操作,需要使用强制类型转换。

强制类型转换符号(),只对最近的操作数有效。可以使用小括号来提升优先级。

// 风险1:精度降低
double a = 1.9;
int b = (int)a;

// 风险2:数据溢出
int c = 1000;
byte d = (byte)c;

总结

Java的基本类型一共有八种分别是: byteshortintlongflotdoublecharboolean,Java的类型与类型之间是可以相互转换的根据如下规则byte -> short/char -> int -> long -> float -> double,如果高精度向低精度类型转换时会出现数值溢出或精度丢失问题,程序也会抛出错误,需要使用强制类型转换,使用()进行强制类型转换。