java中的数据类型有哪些:分清基本与引用类型才能避免内存错误

java中的数据类型有哪些:分清基本与引用类型才能避免内存错误

java中的数据类型有哪些主要分为两大类,分别是8种基本数据类型和引用数据类型,基本类型直接存储数值本身,存放于栈内存,引用类型存储对象地址,真实数据存放于堆内存,你开发时选错类型会直接出现数值溢出、内存占用过高的问题,8种基本类型可以按照数值范围划分整数、浮点、字符、布尔四个组别,引用类型包含类、接口、数组、字符串四种常用形式,不同类型赋值规则完全不一样,基本类型赋值是拷贝数值,引用类型赋值只是传递地址,共用同一个对象数据。

基本数据类型完整分类与取值范围

整数类型一共有四种,byte占用1个字节,取值范围很小,适合存储字节码、状态标识这类范围固定的小数值,short占用2个字节,日常开发很少直接使用,int是4个字节,是java里默认的整数类型,绝大多数整数变量都优先选用int,long占用8个字节,数值范围极大,处理订单编号、时间戳、大数据数值时必须使用long,定义long类型常量末尾一定要加上L后缀,只写数字编译器会默认当成int处理,超出int范围就会直接编译报错。

浮点类型分为float和double两种,float占据4字节,单精度浮点,精度有限,double占用8字节双精度浮点,是java默认的小数类型,float类型变量赋值时数值后面必须添加f标识,忽略这个标识编译器会判定double类型无法自动转换,直接编译失败。char字符类型占用2个字节,能够存储单个汉字、字母以及所有Unicode字符,char本质也是数值类型,可以和int类型相互转换,布尔类型boolean只有true和false两个取值,没有固定字节大小规范,不能和数字0、1互相转换,强行转换会触发编译异常。

数据类型占用字节类型分组默认初始值
byte1整数0
short2整数0
int4整数0
long8整数0L
float4浮点0.0f
double8浮点0.0
char2字符空字符
boolean无固定字节布尔false

引用数据类型的划分与使用特点

引用数据类型脱离了简单数值存储,所有自定义class定义的类都属于引用类型,你创建类对象的时候,栈中只会保留一个地址引用,堆内存开辟独立空间存放对象的所有属性数据。接口本身不能直接实例化,但是接口类型的引用可以指向实现类的对象,属于特殊的引用类型。

数组也是典型的引用类型,不管是基本类型数组还是对象数组,变量都只保存数组首地址,哪怕是int[]数组,变量本身依旧是引用类型,数组长度固定之后无法修改,这是数组最明显的特征。String字符串是java内置的特殊引用类型,java对字符串做了常量池优化,直接赋值的字符串会存入常量池复用,new方式创建的字符串会在堆内存开辟新空间,二者地址不相同,使用==判断结果会不一致。

基本数据类型都拥有对应的包装类,包装类属于引用数据类型,int对应Integer、byte对应Byte,包装类可以为空值null,基本类型不能赋值null,开发中实体类字段几乎全部使用包装类,避免字段为空时报空指针问题。自动装箱和拆箱机制让基本类型和包装类可以直接互相赋值,底层编译器自动完成类型转换,大批量循环操作包装类会产生大量临时对象,拉高内存开销。

你选择数据类型时优先考虑数值范围,小范围数值优先byte、short控制内存占用,普通整数统一用int,超大数字选用long,金额计算不要使用float和double,浮点精度丢失会造成金额误差,必须使用BigDecimal类处理财务相关小数数据。

了解更多百科知识请访问 百科