面试题之JavaSE

1.Java 会对 -128 ~ 127 的整数进行缓存

Integer a=123;
Integer b=123;
System.out.println(a==b);        // 输出 true
System.out.println(a.equals(b);  // 输出 true

a=1230;
b=1230;
System.out.println(a==b);        // 输出 false
System.out.println(a.equals(b);  // 输出 true

Integer a=200;
Integer b=200; int c=200;
System.out.println(a==b);//false
System.out.println(a==c);//true
System.out.println(b==c);//true

包装类型与包装类型比较,==比较的是地址值。

包装类型与基本类型比较,先拆箱,再比较。

2.  String,StringBuffer 和 StringBuilder 

  1. String 是被 final 修饰的,他的长度是不可变的,就算调用 String 的 concat 方法,那也是把字符串拼接起来并重新创建一个对象,把拼接后的 String 的值赋给新创建的对象
  2. StringBuilder 的方法不是线程安全的
  3. StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。
  4. 看源码,StringBuffer的方法比StringBuilder都多来一把锁
    public final class String{
    private final char value[];//容量固定
    
    
    
    public StringBuilder insert(int offset, String str) {
            super.insert(offset, str);
            return this;
        }
    
    
    
        private transient char[] toStringCache;//容量没有固定
        public synchronized StringBuffer insert(int offset, Object obj) {
            toStringCache = null;
            super.insert(offset, String.valueOf(obj));
            return this;
        }

     

你可能感兴趣的:(面试题总结)