String

  1. 声明为final,不可被继承
  2. 实现了Serializable接口,表示字符串是支持序列化的
  3. 内部定义了final char[] value用于存储字符传数据
  4. 不可变性
    无论是对字符串进行重新赋值、连接、修改某个字符,都需要重新指定内存区域赋值
    image.png
  5. 字符串常量池中是不会存储任何相同内容的字符串的。
    image.png
  6. 面试题
    String s = new String("abc");方式创建对象,在内存中创建了几个对象?
    答:两个一个是堆空间中的new结构,一个是char[]对应的常量池中的数据"abc"
  7. 常量与常量的拼接,结果在常量池中
    只要其中有一个变量,结果在堆空间中
  8. 拼接的结果调用intern(),返回值在常量池中
  9. 一道典型的例题
    image.png
  10. String中常用的方法:
    s.trim():去除前后端空格
    equalsIgnoreCase():忽略大小写比较
    concat():连接(abc.concat("def"))=abcdef
    substring():字面意思
    boolean endsWith():判断是否以xx结尾
    startsWith():判断是否以XX开始
    indexOf()
    lastIndexOf():从右开始
    image.png
    **String和char[]之间的转换:**s.toCharArray
    String和byte[]之间的转换:
    image.png
    String、StringBuffer、StringBuilder区别:
    image.png
    image.png
    String无append(),StringBuff有
    stringBuffer.reverse()反转

时间类API(JDK8.0后引入的实用API-)

image.png
主要都是一些方法的具体实现

比较器

自然排序 java.lang.Comparable接口:

  1. 像String、包装类都实现了Comparable接口,重写了comparaTo(obj)方法
  2. 对于自定义类如果需要排序(例如需要调用Array.sort()),就要实现comparable接口并重写方法
    image.png

定制排序 java.util.Comparator接口

image.png

**以上两种方法,前者实现了接口,任何时候调用都可以;后者临时创建

Q.E.D.