自动装箱和自动拆箱

自动装箱:Integer.valueOf()

自动拆箱:integer.IntValue()

两个过程都发生在编译阶段,javac为我们完成这些工作。PS:在Int的值在-128到127之间的时候,会产生缓存机制,值会被放进常量池。也就是方法区(Boolean,Short,Byte,Character也有这种机制。其中Byte因为数值有限,都会被放进方法区)。

引用类型相比于原始类型的优势在与缓存机制。

同时在包装类里储存数值的成员变量value也是被声明为“private final”,所以它们同样是不可变类型。

 

原始数据类型的局限性:

原始数据类型不能和泛型配合使用:因为泛型是在编译的时候自动将类型转换为对应的特定类型,这就决定了使用泛型必须保证需要转换的相应数据类型能转换为object。

引用数据类型的局限型:

Java的对象都是引用数据类型。例如vector,它不像数组那样,内部存储结构是连续的内存。它们存储的是引用;因此对象往往是分散地存储在堆的不同位置;这样增加了灵活性,但是也导致数据操作的低效,尤其是无法充分利用CPU缓存机制。

 

补充: 一个对象大体分为3个部分:对象头,实例数据,对齐填充。 

其中对象头包括两个部分:第一部分存储哈希码,GC分代年龄,锁状态标志,线程持有的锁等,第二部分是类指针。

实例数据部分存储的是对象真正存储的有效信息。

对齐填充是不必然存在的,也没有特别含义,只是起到占位符的作用。因为hotspot 自动内存管理系统要求对象初始地址是8字节的整倍数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值