String s1 = "java";
String s2 = "java";
因为它使用了synchronized来保证线程安全,所以性能不是很高,于是在JDK1.5就有了StringBuilder,它同样提供了append和insert的拼接方法,但它没有使用synchronized来修饰,因此在性能上要优于StringBuffer,所以在非并发操作的环境下可使用StringBuilder
Object 中的 equals() 方法其实就是 ==,而 String 重写了 equals() 方法把它修改成比较两个字符串的值是否相等
public boolean equals(Object anObject) { // 对象引用相同直接返回true if (this == anObject) { return true; } // 判断需要对比的值是否为 String 类型,如果不是则直接返回 false if (anObject instanceof String) { String anotherString = (String)anObject; int n = value.length; if (n == anotherString.value.length) { // 把两个字符串转化为 char 数组对比 char v1[] = value; char v2[] = anotherString.value; int i = 0; // 循环比对两个字符串的每一字符 while (n-- != 0) { // 如果其中一个字符不相等就返回false 若相等就继续比对 if (v1[i] != v2[i]) return false; i++; } return true; } } return false; }
4.ArrayList、Vector和LinkedList有什么共同点与区别?
1. ArrayList、Vector和LinkedList都是可伸缩的数组,即可以动态改变长度的数组。
2. ArrayList和Vector都是基于存储元素的Object[] array来实现的,它们会在内存中开辟一块连续的空
间来存储,支持下标、索引访问。但在涉及插入元素时可能需要移动容器中的元素,插入效率较
低。当存储元素超过容器的初始化容量大小,ArrayList与Vector均会进行扩容。
3. Vector是线程安全的,其大部分方法是直接或间接同步的。ArrayList不是线程安全的,其方法不具
有同步性质。LinkedList也不是线程安全的。
4. LinkedList采用双向列表实现,对数据索引需要从头开始遍历,因此随机访问效率较低,但在插入
元素的时候不需要对数据进行移动,插入效率较高。
浙公网安备 33010602011771号