不能够,由于String类有final修饰符,而final不能被继承的,实现细节不容许改变。日常咱们定义的String str = " a ";其实和String str = new String("a");仍是有差别的。java
前者默认调用的String.valueof来返回String的实例对象,至于调用哪一个则取决于你的赋值,好比String num = 1;调用的是public static String valueOf(int i){数组
return Integer.toString(i);缓存
}安全
后者则是调用以下部分:并发
public String(String original) {
this.value = original.value;
this.hash = original.hash;
} 函数
最后咱们的变量都存储在一个char数组中。ui
private final char value[];this
String 字符串常量(final修饰,不可被继承),String是常量,当建立以后即不能更改。(能够经过StringBuffer和StringBuilder建立String对象(经常使用的两个字符串操做类)。) 线程
StringBuffer 字符串变量(线程安全),其也是final类别的,不容许被继承,其中的绝大多数方法都进行了同步处理,包括经常使用的Append方法也作了同步处理。其自jdk1.0起就已经出现。其toString方法会进行对象缓存,以减小元素的复制开销。设计
public synchronized String toString() {
if (toStringCache == null) {
toStringCache = Arrays.copyOfRange(value, 0, count);
}
return new String(toStringCache, true);
}
StringBuilder 字符串变量,(非线程安全)其自jdk1.5起开始出现。与StringBuffer同样都继承和实现同一个接口和类,方法除了没有使用synch修饰之外基本一致,不一样之处在于最后toString的时候,会直接返回一个新对象。
public String toString() {
// Create a copy, don’t share the array
return new String(value, 0, count);
}
ArrayList和LinkedList都实现了List接口,有如下的不一样点:
1.ArrayList是基于索引的数据接口。它的底层是数组。它能够以O(1)时间复杂度对元素进行随机访问。以此对应,LinkedList是以元素列表的形式存储的数据,每个元素都和它的前一个后一个元素连接在一块儿,在这种状况下,查找某个元素的时间复杂度是O(n)。
2.相对于ArrayList,LinkedList的插入,添加,删除操做速度更快,由于当元素被添加到集合任意位置的时候,不须要像数组那样从新计算大小或者是更新索引。
3.LinkedList比ArrayList更占内存,由于LinkedList为每个节点存储了两个引用,一个指向前一个元素,一个指向下一个元素。
父类静态代变量、
父类静态代码块、
子类静态变量、
子类静态代码块、
父类非静态变量(父类实例成员变量)、
父类构造函数、
子类非静态变量(子类实例成员变量)、
子类构造函数。
hashMap是线程不安全的,HashMap是数组+链表+红黑树(JDK1.8增长了红黑树部分)实现的,采用哈希表来存储的,
参照该连接:https://zhuanlan.zhihu.com/p/21673805
JAVA8 的 ConcurrentHashMap 为何放弃了分段锁,有什么问题吗,若是你来设计,你如何设计。
参照:https://yq.aliyun.com/articles/36781
有没有顺序的Map实现类,若是有,他们是怎么保证有序的。
TreeMap和LinkedHashMap是有序的(TreeMap默认升序,LinkedHashMap则记录了插入顺序)。
参照:http://uule.iteye.com/blog/1522291
一、抽象类和接口都不能直接实例化,若是要实例化,抽象类变量必须指向实现全部抽象方法的子类对象,接口变量必须指向实现全部接口方法的类对象。
二、抽象类要被子类继承,接口要被类实现。
三、接口只能作方法申明,抽象类中能够作方法申明,也能够作方法实现
四、接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。
五、抽象类里的抽象方法必须所有被子类所实现,若是子类不能所有实现父类抽象方法,那么该子类只能是抽象类。一样,一个实现接口的时候,如不能所有实现接口方法,那么该 类也只能为抽象类。
六、抽象方法只能申明,不能实现。abstract void abc();不能写成abstract void abc(){}。
七、抽象类里能够没有抽象方法 。
八、若是一个类里有抽象方法,那么这个类只能是抽象类 。
九、抽象方法要被实现,因此不能是静态的,也不能是私有的。
十、接口可继承接口,并可多继承接口,但类只能单根继承。
继承指的是一个类(称为子类、子类接口)继承另一个类(称为父类、父接口)的功能,并能够增长它本身的新功能,继承是类与类或者接口之间最多见的关系。在java中此类关系经过关键字exetents明确标识,在设计时候通常没有争议性。