1.public ,private, protected 不写时候的区别:
作用于 | 当前类 | 同包 | 子孙类 | 其他package |
---|---|---|---|---|
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
friendly | √ | √ | × | × |
private | √ | × | × | × |
不写时默认为friendly
2.Collection和Collections的区别
答:
1.java.util.Collection是一个集合接口
。它提供了集合对象进行基本操作的通用接口方法。
Collection接口在java类库中有很多具体的实现。Collection接口意义是为各种具体的集合提供了最大化的统一操作方式。
1 | Collection |
java.util.Collections是一个包装类。它包含有各种有关集合操作的
静态多态方法
。此类不能实例化
,就像一各工具类,服务于java的Collection框架
1 | import java.util.ArrayList; |
3.Vector类和ArrayList类的区别
答:
Vector
和ArrayList
同属于List
接口下,Vector从java1开始一直沿用至今,他俩的最大区别之处是加入了同步锁的策略,Vector是一种老的动态数组,是线程同步的,效率很低,一般不赞成使用。
4.String和StringBuffer的区别
答:
String 类代表字符串。Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现。
我们查看内部源码
1 | public final class String |
查看源码的关键字’final’内部则是维护一个不可改变的数组,所以不可以动态的扩种添加,只能创建一个更大的对象来装载新添加的数据
下面我们来看一下’StringBuffer’的官方源代码
1 | public final class StringBuffer |
从这里看出我们实际上增加字符串的过程实际上就是调用了自身的
append
方法而已,追查具体的实现
1 | public AbstractStringBuilder append(String str) { |
实际上是计算当前字符串的长度,并且通过计数器把最新存储的位置保存下来,之前还需要判空,
ensureCapacityInternal(count + len);
就是他们的动态扩展数组大小的具体实现,其原理就是判断当前存储的的位数是否足够,不够就动态的空中。