数据类型
数据类型
01、概述
我们在编写代码的时候通常会定义大量的变量,有全局变量、局部变量、静态变量、实例变量等等。
那么什么是变量呢?我认为变量就是申请内存来存储一个值。也就是说,当创建变量的时候,需要在内存中申请空间。内存管理系统会根据变量的类型为变量分配不同的存储空间,只要定义了变量的类型,就告诉了内存管理系统分配多少内存空间以及变量的存储方式。
Java语言中划分了两大数据类型:基本数据类型(内置数据类型)和引用数据类型。
02、基本数据类型
基本数据类型分为三大类:数值型、字符型、布尔型。 官网的描述如下:
byte:数据类型为 8 位有符号二进制的补码整数。它的最小值为 -128,最大值为 127(含)。数据类型对于节省大型数组中的内存非常有用,其中内存节省实际上很重要。
short:数据类型是 16 位有符号二进制的补码整数。它的最小值为 -32768,最大值为 32767(含)。与byte 一样,使用该类型可以节省大型数组中的内存。
int:默认情况下,数据类型为 32 位有符号二进制补码整数,最小值为 -231,最大值为 231-1。在 Java SE 8 及更高版本中,可以使用该数据类型来表示无符号的 32 位整数,该整数的最小值为 0,最大值为 232-1。使用 Integer 类将数据类型用作无符号整数。
long:数据类型为 64 位二进制补码整数。带符号长整型的最小值为 -263,最大值为 263-1。在 Java SE 8 及更高版本中,可以使用数据类型来表示无符号的 64 位长整型,该长整型的最小值为 0,最大值为 264-1。如果需要的值范围比int提供的值范围更宽,请使用此数据类型。
float:数据类型为单精度 32 位 IEEE 754 浮点数。如果需要在浮点数的大型数组中节省内存。此数据类型不能应用于精确值,例如货币。若需要精确值,需要改用java.math.BigDecimal 类。
double:数据类型为双精度 64 位 IEEE 754 浮点数。对于十进制值,此数据类型通常是默认选项。如上所述,此数据类型绝不能应用于精确值,例如货币。
布尔值:数据类型只有两个可能的值:true和false。将此数据类型用于跟踪真/假条件的简单标志。此数据类型表示一位信息,但其“大小”不是精确定义的。
char:数据类型是单个 16 位 Unicode 字符。它的最小值为 '\u0000'(或 0),最大值为 '\uffff'(或 65,535(含 <>,<>)。
接下来我分别介绍下每一种具体的数据类型
数值型-整数型
byte
byte中文又叫字节,是最小的整数类型,在内存区域只占一个字节的大小,也就是8位(bit),它可存储的数据范围是-27 ~ 27-1,换算成十进制是-128 ~ 127,默认值是0。 byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一。java中定义该类型变量示例:
byte overMaxByte = 128; //编译报错
byte overMinByte = -129; //编译报错
byte minByte = -128; //byte最小值
byte maxByte = 127; //byte最大值
byte overMinByte = (byte) -129; //结果为127
byte overMaxByte = (byte) 128; //结果为-128
short
short类型变量占用两个字节的大小,是byte的两倍,也就是16位(bit), 它的数据存储范围是-215 ~ 215+1,换算成十进制是-32768 ~ 32767。默认值和byte一样都是0。java中定义该类型变量示例:
short minShort = -32768; //编译成功
short maxShort = 32767; //编译成功
short overMinShort = -32769; //编译错误 溢出
short overMaxShort = 32768; //编译错误 溢出
short overMinShort = (short) -32769; //结果为32767
short overMaxShort = (short) 32768; //结果为-32768
int
int 在内存中占四个字节,也就是32位(bit),表示的范围是-231 ~ 231-1,也就是-2147483648 ~ 2147483647。java语言中整数默认的数据类型就是int,默认值也是0。java中定义该类型变量示例:
int overMinInt = -2147483649; //编译出错
int overMaxInt = 2147483648; //编译出错
int minInt = -2147483648; //int最小值
int maxInt = 2147483647; //int最大值
int overMinInt = (int) -2147483649; //编译出错
int overMaxInt = (int) 2147483648; //编译出错
int minInt = (int) -2147483649L; //结果为2147483647
int maxInt = (int) 2147483648L; //结果为-2147483648
int minInt = -2147483648 - 1; //结果为2147483647
int maxInt = 2147483647 + 1; //结果为-2147483648
long
long是整数类型中最大的,在内存中占8个字节,也就是64位(bit)。支持的数值范围是-263 ~ 263-1,这种类型主要使用在需要比较大整数的系统上。该类型默认值是0L,"L"理论上不区分大小写,但是建议大写,因为若携程"l"容易与数字"1"混淆。java中定义该类型变量示例:
long overMinLong = -9223372036854775809L; //编译出错
long overMaxLong = 9223372036854775808L; //编译出错
long minLong = -9223372036854775808L; //long最小值
long maxLong = 9223372036854775807L; //long最大值
long minLong = -9223372036854775808L - 1; //结果为9223372036854775807
long maxLong = 9223372036854775807L + 1; //结果为-9223372036854775808
数值型-浮点型
float
float类型数值在内存中占用4个字节,也就是32位(bit),我们称为单精度浮点数。默认值 0.0f,"f"也不区分大小写,可以写成"F"。浮点数无法用于表示精确的数值。Float和Double的最小值和最大值都是以科学记数法的形式输出的,结尾的"E+数字"表示E之前的数字要乘以10的多少次方。比如3.14E3就是3.14 × 103 =3140,3.14E-3 就是 3.14 x 10-3 =0.00314。java代码定义变量示例如下:
float f1 = 222.2f;
float f2 = 222.2F;
double
double类型数值在内存中占用8个字节,也就是64位(bit),我们称之为双精度浮点数。默认值是0.0d,"d"也不区分大小写,可以写成"D"。double和float一样也不能表示精确的值。java中浮点数的默认类型是double类型。java代码定义变量示例如下:
double d1 = 222.2d;
double d2 = 222.2D;
double d3 = 222.D;
double d4 = 222.2;
double d5 = 222D;
字符型
char char是字符类型,java语言对字符都采用unicode字符编码。所谓字符编码,就是指用一串二进制数据来表示特点的字符。char类型是一个单一的16位unicode字符,最小值是\u0000(十进制和值0相等),最大值是\uffff(十进制和65535相等)。java代码定义示例:
char c1 = 'a'; //直接用字符对变量进行赋值
char c2 = 655; //用字符对应的编码进行赋值
char c3 = '\u0061';//
char c4 = '0x0061'; //使用16进制的值进行赋值
//一般我们使用char类型时,回直接用字符对变量进行赋值,而不会使用字符对应的编码,因为记不住!
//如果需要使用到一些特殊字符,需要使用转义字符来转义:
char c5 = '\'';
布尔型
boolean boolean表示一位的信息,只有两个取值:true和false,默认值是false。java代码编译的时候会把boolean用int或者byte替换掉,用0表示false,用非0正整数表示true。但是java不允许我们直接用数字对boolean赋值。java代码定义如下:
boolean f1 = true; //编译成功
boolean f2 = false; //编译成功
boolean f1 = 1;//编译报错
03、引用数据类型
java的引用类型有类、接口、数组形式。和基础类型的区别是引用类型可以直接赋值位null,代表空。可以说所有的非基本数据类型都是引用类型,例如String类型就是引用类型,还有Double、Byte、Long、Boolean等许许多多jdk提供的基本类型包装类(java自带自动装箱拆箱机制),还有面向对象程序设计中我们会涉及大量的引用数据类型。java简单定义引用类型变量示例如下:
Object object = null; //类引用类型
List<Object> list = null; //接口引用类型
int[] array = null; //数组引用类型