flash-boy

导航

 

1.final修饰String的好处

使用final修饰的第一个好处是安全;第二个好处是高效,以JVM中的字符串常量池来举例,如下两个变量:

String s1 = "java";
String s2 = "java";

只有字符串是不可变时,我们才能实现字符串常量池,字符串常量池可以为我们缓存字符串,提高程序的运行效率

2. String 和 StringBuilder、StringBuffer 的区别

因为String类型是不可变的,所以在字符串拼接的时候如果使用String的话性能会很低,因此我们就需要使用另一个数据类型StringBuffer,它提供了appendinsert方法可用于字符串的拼接,它使用synchronized来保证线程安全,如下源码所示:

    @Override
   public synchronized StringBuffer append(Object obj) {
       toStringCache = null;
       super.append(String.valueOf(obj));
       return this;
  }

   @Override
   public synchronized StringBuffer append(String str) {
       toStringCache = null;
       super.append(str);
       return this;
  }

因为它使用了synchronized来保证线程安全,所以性能不是很高,于是在JDK1.5就有了StringBuilder,它同样提供了appendinsert的拼接方法,但它没有使用synchronized来修饰,因此在性能上要优于StringBuffer,所以在非并发操作的环境下可使用StringBuilder来进行字符串拼接.

 

3. String ==和equals的区别

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采用双向列表实现,对数据索引需要从头开始遍历,因此随机访问效率较低,但在插入
元素的时候不需要对数据进行移动,插入效率较高。
 
posted on 2022-09-08 20:16  flash-boy  阅读(39)  评论(0)    收藏  举报