苏木三少
错的不是你,而是这个世界。

JAVA面试题总结

JAVA基础面试

一、数组在内存中如何分配?

静态初始化

初始化时由程序员显示指定每个数组元素的初始值,由系统决定数组长度。

1
2
3
String[] computers ={"Dell","Lenovo","Apple","Acer"};

String[] names = new String[]{"zhangsan","lisi","jingxinag"};

上面两个数组系统为其自动分配长度。

动态初始化

初始化时由程序员显示指定数组的长度,由系统为数组的每个元素分配初始值。

String[] Cars = new String[4];

动态初始化分配完:值为null。

二、String、StringBuffer、StringBuilder的区别

String 声明为final类  典型Immutable(不可变)类,字符串常量池缓存,

String对象(可以改变)

我们通过反射获取String类中的char value字段,改变访问权限,

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
String s = "Hello Word";

System.out.println("s = "+s);

//获取String类中的value字段

Field valueFieldofString = Strinng.class.getDeclaredField("value");

//改变value属性的访问权限

valueFieldofString.setAccessible(true);

//获取s对象上的value属性值

char[] value = (char[] valueFiledofString.get(s);

//改变value所应用的数组中的第五个值

value[5] = '-';

System.out.println("s="+s);

StringBuffer  和 StringBuilder的区别

实现原理基于可修改的char数组,默认大小16

都继承AbstractStringBuilder

StringBuffer线程安全,StringBuilder非线程安全。

StringBuffer使用append添加元素,会去开辟更大的空间(大概两倍大)复制原来的添加新的。改变char value的内存,改变当前对象。

应用场景

三、ArrayList和LinkedList有什么区别?

1、ArrayList查询快增删慢,列表结尾预留一定的容量空间。

2、LinkedList查询慢增删快,不支持高效的随机元素访问。每一个元素都需要消耗相当的空间。

末尾增加元素开销一样,ArrayList内部增加一项,可能导致数组重新分配,列表中插入删除一个的元素都会移动。

而对LinkedList开销统一,分配内部Entry对象。插入删除一个元素的开销是固定的。

3、ArrayList基本都用for循环,不用lterator迭代器遍历。(索引是标识出来的)

4、LinkedList都用lterator迭代器遍历,极少用for循环去遍历。不能使用索引方式去访问。(索引是隐式的)

是否实现了RandomAccess(随机访问)标志性接口,接口实现了就用for循环。否则就用Iterator

赞(2) 打赏
有问题的朋友随时留言,或者加我为好友。我的QQ是805375353. <<苏木三少博客 » JAVA面试题总结

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

十年之约