Java 开发

Java 面试基础知识(二)

2018-07-21  本文已影响12人  小生不cai

1.string、stringBuffer和stringBuilder的区别

可变性:string是由private final char[]实现的所以是不可变的。而stringBuffer和stringBuilder则是没有final修饰所以是可变的。

线程安全性:string可以理解为常量所以是线程安全的。stringBuffer对字符串基本的方法如:append、insert、indexOf和expandCapcity等方法加了同步锁或者对调用的方法加了同步锁所以是线程安全的,而stringBuiler没有加所以线程不安全。

性能:string进行修改的时候都会生成一个新的string,然后将指针指向这个新的string,所以系统消耗较大;stringBuffer和stringBuilder每次操作都不生成新的对象,但是由于stringBuffer加了同步锁所以性能相对于stringBuilder性能下降10%-15%。

2.hashcode与equals方法的区别

equals相等,hashcode一定相等;hashcode相等,equals不一定相等。具体例子请看:hashmap源码。

3.抽象类和接口的区别

设计层次不同:抽象类对类抽象,接口对行为抽象。抽象类对整个类进行抽象,包括属性和行为。接口对类的方法进行抽象。

跨域不同:抽象类体现的是一种继承关系是一种“is a”的关系,子类和父类有层级的关系。接口的实现仅仅是一个契约的关系,是“like a”的关系。

4.为什么要使用泛型及泛型擦除

泛型即“参数化类型”,指定集合或者类使用的数据类型,避免强制转换。泛型擦除及将泛型代码转化为普通的代码即:1)将所有泛型使用其最上层的父类进行替换。2)移除所有数据类型。

上一篇 下一篇

猜你喜欢

热点阅读