1.数据类型概述
Java语言中的数据类型分为两大类,分别是基本数据类型和引用数据类型.程序中需要处理许多数据,对于不同数据都有其对应的数据类型,其实就是在内存中开辟一个存储空间来存放数据,不同数据所开辟的内存大小也会不一样.
2.数据存储的单位
位,字节,字是计算机数据存储的单位,位是最小的存储单位,每一个位存储一个1位的二进制码,一个字节由8位组成,而字通常为16,32或64个位组成.
位(bit):是计算机中最基本的单位,位是最基本的概念,在计算机中,由于只有逻辑0和逻辑1的存在,即每一个逻辑0或者1便是一个位;
字节(byte):计算机中处理数据的基本单位,是由八个位组成的一个单元,8个bit组成1个byte;
字(word):代表计算机处理指令或数据的二进制数位数,是计算机记性数据存储和数据处理的运算的单位,在常见的计算机编码格式下,一个字等于两个字节(十六位) (1word=2byte=16bit)
3.基本数据类型
Java基本数据类型共有八种,可分为三类
类型 | 字节(byte) | 位数(bit) | 数值范围 |
---|---|---|---|
int | 4 | 32 | -2147483648~2147483647 |
short | 2 | 16 | -32768~32767 |
long | 8 | 64 | -9223372036854774808~9223372036854774807 |
byte | 1 | 8 | -128~127 |
float | 4 | 32 | |
double | 8 | 64 | |
char | 2 | 16 | |
boolean | 1 | 8 | |
4.引用数据类型
引用数据类型传递时是以拷贝引用地址的方式传递给接受变量,而非复制整个"数据"本体.
除了基本数据类型外的,其他结构化的数据类型,如字符串类型String或自定义的类,本质上是对现实世界结构化,关系化数据的抽象,因为一个对象总是具备多个特征属性的,每个属性都是一个基本数据类型.
引用数据类型
为什么不是拷贝值?
这类类型的变量本质上是一个段存储空间的起始地址,因为结构化数据的存储空间的大小是由所有属性叠加的,且是可变的,不能或很难实现原子性的拷贝,且空间代价很大,因此参数传递时并不是机械的拷贝所有属性,所有空间,而是仅复制拷贝起始地址就行了,其他字段可以据此基地址和字段顺序进行偏移计算所得.
5.值类型和引用类型的区别
-
概念方面:基本数据类型变量名指向具体的数值,参数传递会拷贝值的副本,原值不收影响;引用类型变量名指向存数据对象的内存地址,数据传递是复制内存段的起始地址,最终指向同一内存段.
-
相等语义:基本类型使用时需要赋具体值,使用==号判断值是否相等.引用类型==是判断引用地址是否相等;通常应重写equals方法实现自定义的逻辑,如同一学生会存在多个缓存中,重写equals,根据学号no是否相等判断是否是同一学生.
6.类型转换
不同类型的数据,开辟出的内存空间大小不同,所以每种类型的取值范围就不同.
Java要求=等号左边和=等号右边的类型要一致,如果不一致,就需要进行数据类型转换.Java中不同的类型之间,在满足数据兼容的条件下可以实现转换.Java中的数据类型转换可分为以下几种:
-
自动类型转换:容量小的类型自动转换为容量大的数据类型;
-
代码不需要经过任何处理,在代码编译时,编译器会自动进行处理.
-
特点:数据范围小的转为数据范围大的时会自动进行.
-
-
强制类型转换:容量大的数据类型转换为容量小的数据类型;
-
当进行操作时,代码需要经过一定的格式处理,不能自动完成.
-
特点:数据范围大的到哦数据范围小的.
-
-
隐含强制类型转换:在变量初始化时,int类型会隐含强制转换成低级别的byte和short类型;
-
其他类型转换:包装类,字符串,基本类型直接的转换.
对基本类型来说,常见的数据转换方式包括自动类型和强制类型转换;
对引用类型而言,只存在强制类型转换一种形式.
注意:
-
如果需要把范围大的类型赋值给范围小的,需要强制类型转换,但是可能精度丢失.
-
两个数据类型有关系才能互相转换.
//隐式转换 int a=100; //小类型转换大类型可以直接进行转换 long b=a; System.out.println("b:"+b);//100 //强制转换 double c=10.98; //大类型转换小类型可能会损失精度 int d=(int)c; System.out.println("d:"+d);//10
-