Java是一种强类型语言,每个变量只能声明为一种类型。但是,Java和C/C++一样提供了“自动类型提升”和“强制类型转换”来适应一些不同数据类型的“混合运算”。在Java中,共有8种基本数据类型和4种引用数据类型。
一、8种基本数据类型
1.1 整型
1.1.1 long长整型
long长整形是用于表示比较大的数量使用的类型。比方说,人类的数量,64亿,是一个整数且在计算机中需要8个字节才能存放下。这个在普通的场合下基本很少用到。
1.1.2 int整型
相比long长整型,int类型就常用多了。在以后的编程中,遇到最多的类型就是int类型。Java中的int类型有一个非常好的特性,就是其长度与平台无关,就是4个字节,这给程序的移植带来了极大的方便。
1.1.3 short短整型
short型,相比较int型数据要节约一倍的内存开销。但是,即使short类型能够表达的数据,我们仍然使用int型来表示。这是因为,short类型在“自动类型提升”时往往会导致编译报错:可能会丢失精度。还有一点很重要的原因是,常数,比方说5,在Java中如果直接出现在表达式中,系统会认为它是一个int型的数据。
1.1.4 byte字节型
byte字节型数据,适用范围很小。
1.1.5 4种整型的取值范围
类型
存储空间(字节)
取值范围
long
8
-2^64~+2^64-1(-922亿亿-+922亿亿)
int
4
-2^32~+2^32-1(-21亿-+21亿)
short
2
-32768~+32767
byte
1
-128~+127PS:注意,所有的Java的数据类型都是有符号型,不存在无符号型数据类型
1.2 浮点型
1.2.1 双精度double
double类型,用于表示小数,其小数点后的有效数字达到15位,能基本满足现实中大部分对数据精度的要求。Java中如果使用小数,如3.14,则默认是double类型,如果你想区分float和double,你应该在声明的小数后面加上后缀F(float)、D(double)。
1.2.2 单精度float
float类型,同样用于表示小数,但是小数后的有效数字仅为7位,类似int和long一样,在实际开发过程中很少用到float,而选择使用double类型,这样虽然牺牲了一点内存开销,但是会避免很多编译错误。
1.2.3 Java中十六进制表示的浮点型数据的格式
在Java中除了使用10进制来表示3.14,同样可以使用16进制表示。
10进制 0.125D
16进制 0x1.0p-3(尾数采用16进制,指数采用10进制,指数的基数是2)
PS:在C/C++中浮点数可以采用也指数来表示,如314.15D==3.1415E2/3.1415e2(尾数使用10进制表示,是该小数的有效数字部分,E/e表示以10为底的指数)。另外,有一点很重要,那就是所有的浮点型数据都比整型数据大,这里的“大”不是指所占用的内存空间大小,而是自动类型提升时的方向问题。比方说,运算式中出现float类型数据和long长整型数据,则系统会自动把long类型转变为float类型再进行运算。
1.3 字符型
1.3.1 Unicode编码字符型char
Java的char类型和C/C++的char类型不同之处在于,俩者对应的编码方式不同。C/C++对应的是ASCII码,Java对应的是Unicode码。ASCII码只占用1个字节,而Unicode码却占用2个字节。Java中的char可以是汉字和其它地区使用ASCII码不能表示的字符,很显然Java中的char类型功能要更强大。
1.4 二值型
1.4.1 布尔型boolean
布尔值很简单,只有二个值:false和true,用于判断逻辑条件。这里,尤其注意在Java中整型值不能和布尔值进行互换。
1.5 取值范围
类型
内存空间
取值范围
默认初始化值
double
8个字节
无需记住
0.0D
float
4个字节
无需记住
0.0F
char
2个字节
\u0000~\uFFFF
\u0000
boolean
1个字节
true/false
false
1.6 自动类型提升示意图
图中,6个实心箭头表示该种转换不会导致数据信息的丢失,而3个虚心的箭头表示可能有精度损失的转换。
计算机在进行算术运算前,都要先把操作数变成同一种数据类型,然后进行计算,对应混合数据类型运算,Java的运算规则是:
- 如果两个操作数中有一个是double类型,另一个操作数就会自动转换为double类型;
- 否则,如果其中一个是float类型,另一个操作数就会自动转换为float类型;
- 否则,如果其中一个是long类型,另一个操作数就会自动转换为long类型;
- 否则,两个操作数都将会被转换为int类型。
二、4种引用类型
2.1 字符串String
Java没有内建的字符串类型。字符串是通过Java在基础类库中提供一个预定义的String类来实现的。
2.2 数组Array
数组,是同一种数据类型数据的一个集合。
2.3 类Class
类class,是对象的共性的抽象的描述。
2.4 接口Interface
接口Interface是对功能进行拓展的接口。
三、数据类型总结
每种语言都有自己的数据类型,数据类型是对现实的数据进行分析而抽象出的各类数据的共性。在计算机中,每一个数据必须对应一种数据类型,才可以被计算机处理。这些数据类型被称为“内建数据类型”。