String家族易考笔试题
    1 所属的包 继承关系 实现接口
    2 String构建方式
    3 String对象的存储
    4 ==与equals方法的区别
    *5 String的不可变特性
    6 String中常用的方法(比如给你个程序 给出运行结果)
    7 String与StringBuffer区别 或 String与StringBuilder区别
    8 StringBuffer与StringBuilder区别

    1.所属的包 继承关系 实现接口
    java.lang包 无需导包
    String默认继承Object类 实现三个接口Serializable CharSequence Comparable

    2.String构建方式
    常量 构造方法

    3.String对象的存储
    String str = “abc”——>存储在字符串常量池 此时abc只有常量池中这一份
    String str = new String(“abc”);——> 产生几个对象?
    一个或两个
    如果常量池原来没有”abc” 就是两个
    对象引用存储在堆内存中 此时abc有两份 一份在常量池中 一份在堆中
    堆中的值是从常量池中复制出来的
    如果常量池原来有”abc” 就是一个

    4.==与equals方法的区别
    ==可以比较基本数据类型 也可以比较引用数据类型(比较的都是变量中存储的内容)
    若比较的是基本类型 比较的是变量存储的值
    若比较的是引用类型 比较的是变量中存储的地址引用

    equals()只能比较引用类型
    是Object类中继承过来的方法 每一个引用类型都可以调用
    默认的equals()方法比较规则与==一致
    但是String类重写了equals()方法 所以String比较的是字符串中的字面值是否相等

    1. String s1 = "abc";//"abc"应该是一个对象 abc可以视为常量 存储在常量区里
    2. String s2 = "abc";
    3. String s3 = new String("abc");
    4. String s4 = new String("abc");
    5. System.out.println(s1==s2); //true
    6. System.out.println(s1==s3); //false
    7. System.out.println(s3==s4); //false
    8. System.out.println(s1.equals(s2)); //true
    9. System.out.println(s1.equals(s3)); //true
    10. System.out.println(s3.equals(s4)); //true
    11. //String类将继承自Object类的equals方法重写了
    12. //将原有比较==的关系改完比较字符值

    String.png
    *5.String的不可变特性
    体现在两个地方 长度及内容
    长度—->final修饰的数组地址引用不变 且数组长度本身不可变
    内容—->private修饰的属性 不能在类的外部访问
    在String类中包含一个数组 private final char[] value; //存储String中的每一个字符
    所以 final修饰的数组地址不变 且数组长度本身不可变
    又private修饰 所以数组中的内容不可改变

    6.String中常用的方法—-(注意与StringBuilder的区别)

    String类中没有的方法
    append(); insert(); delete(); deleteCharAt(); reverse();
    String类同名的方法 名字相同 用法不一致
    length(); charAt(); codePointAt(); indexOf(); lastIndexOf();
    substring(); replace();
    不常用的方法
    ensureCapacity(); capacity(); setLength(); trimToSize(); setCharAt();

    7.String与StringBuffer区别 或 String与StringBuilder区别

    String
    JDK1.0
    实现了一个接口Comparable
    String的不可变特性 长度和内容
    有一些方法StringBuilder没有 比如concat(); compareTo(); toUpperCase();
    StringBuilder
    JDK1.5
    实现了一个接口Appendable
    StringBuilder是可变字符串 没有final修饰 可以扩容
    有一些方法String没有 比如append(); reverse(); delete(); insert();

    8.StringBuffer与StringBuilder区别
    StringBuffer是早期版本JDK1.0
    StringBuilder是后来的版本JDK1.5
    方法几乎都一样
    StringBuffer 线程同步 安全性较高 执行效率相对较低
    StringBuilder 线程不同步 安全性较低 执行效率相对较高