Java教程

关于java面试的总结

本文主要是介绍关于java面试的总结,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

问题一:String,StringBuffer,StringBuilder 有啥区别

答案:三者底层都是用char数组存储字符串,string里的char 数组被final修饰,所以是不可变的
也不能被继承,每次对String的操作就是创建了新的String对象
StringBuffer和StringBuilder都继承了AbstrctStringBuilder类,都重写了这个类的append方法,但是
stringBuffer在重写的方法前加上了synchronized关键字,这个关键字就是为了保证多线程中的线程同步
和保证数据的准确性,所以StringBuffer是线程安全的
然后创建锁销毁锁也是需要时间的,所以单线程下StringBuilder最快

问题二:Object o =new Object()在堆内存中占了多少个字节

答案:对象在内存中的存储布局可以分为:对象头,实例数据,填充,对象头包括markword和类型指针
markword里存了锁相关的信息,占8个字节,java虚拟机通过这个类型指针知道这个对象是哪个类的对象
占4个字节,由于object对象里的成员变量为0,所以实例数据也不占字节,又由于jvm规定任何对象所占的
内存字节数必须是8的倍数,不够就用padding填充,所以object对象共占16个字节
jvm默认是64位操作系统的,所以指针也应该是64位,占8个字节,由于jvm开启了指针压缩
所以类型指针占4个字节,markword雷打不动8个字节,所以没有开启指针压缩也应该占8+8个字节
这篇关于关于java面试的总结的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!