int 和 Integer之面试官和你

面试官:int和Integer的区别,说一下。

你:int是基本类型。Integer是引用类型,是int的包装类,提供了很多数学计算的方法和字符串转int的方法等。jdk1.5提供了自动装箱,拆箱的功能,无需进行强转。

 

面试官:那基本类型都有哪些?

你:基本类型有:byte char int short long float double boolean

 

面试官:Integer.valueOf(2) == Integer.valueOf(2) 和 Integer.valueOf(128) == Integer.valueOf(128)的结果是什么?

你: true和false

 

面试官:为什么是true和false?

你:Integer.valueOf有缓存作用,可以大大提高性能,只作用在-128到127。

 

面试官:那这个缓存值能不能改?

你:可以啊,-XX:AutoBoxCacheMax=N

 

面试官:你刚说的自动装箱,拆箱是在什么阶段?编译还是运行时?

你:编译

 

面试官:那自动装箱时,valueOf的缓存会起作用吗?

你:会的,编译的时候会将基本类型用valueOf包裹起来。

 

面试官:你平时都用基本类型还是引用类型?为什么?

你:尽量用基本类型,基本类型占的内存少,10万个对象和基本类型占的内存相差很多,处理速度也是基本类型快,所以为了性能,还是多选用原始类型,并且尽量避免不必要的装箱拆箱操作。

 

面试官:说到内存的占用,如何计算对象的大小?对象的内存结构是什么样的?对象头结构是什么样的?

你:对象的结构是对象头,对象实例,对齐填充。

头一般是16字节,由哈希码,线程持有的锁等,还有指向对象的指针。

实例是存储对象自身的信息,如类信息,方法,字段。

对齐填充就是个占位符,用来将使用的内存填充到8字节的倍数。

 

面试官:那基本类型是否线程安全?

你:不是,如果要操作,用AtomicInteger,或者AtomicLong,当然也可以用正常的并发手段来解决。

 

面试官:WDNMD,我问不下去了

你:WDNMD,再来

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值