面试官: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,再来