String的特性

  • String类:代表字符串。Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现。
  • String是一个final类,不可被继承。
  • String实现了Serializable接口:表示字符串是支持序列化的
  • String实现了Comparable接口:表示String可以比较大小
  • Stirng内部定义了final char[] value用于存储字符串数据
  1. public final class String
  2. implements java.io.Serializable, Comparable<String>, CharSequence {
  3. /** The value is used for character storage. */
  4. private final char value[];
  5. /** Cache the hash code for the string */
  6. private int hash; // Default to 0
  • String:代表不可变的字符串序列。简称“不可变性”。

    • 1、当对字符串重写赋值时,需要重新指定内存区域赋值,不能使用原有的value进行赋值。
    • 2、当对现有的字符串进行连接操作时,也需要重新指定内存区域赋值,不能使用原有的value进行赋值。
    • 3、当调用String的replace()方法修改指定字符或字符串时,也需要重新指定内存区域赋值
  • 通过字面量的方式(String s1=”abc”),区别于new,给一个字符串赋值,此时的字符串声明在字符串常量池中。
  • 字符串常量池中是不会存储相同内容的字符串的。

20.String字符串 - 图1

String对象的创建

  1. String str = "hello";
  2. //本质上this.value = new char[0];
  3. String s1 = new String();
  4. //this.value = original.value;
  5. String s2 = new String(String original);
  6. //this.value = Arrays.copyOf(value, value.length);
  7. String s3 = new String(char[] a);
  8. String s4 = new String(char[] a,int startIndex,int count);

20.String字符串 - 图2

20.String字符串 - 图3

20.String字符串 - 图4

20.String字符串 - 图5

20.String字符串 - 图6

面试题

String s = new String(“abc”);方式创建对象,在内存中创建了几个对象?

答案

两个。一个是在堆空间中new结构,另一个是char[]对应的常量池中的数据:”abc”。

20.String字符串 - 图7

20.String字符串 - 图8

20.String字符串 - 图9

答案:good,best

面试题

20.String字符串 - 图10

String的常用方法

20.String字符串 - 图11

20.String字符串 - 图12

20.String字符串 - 图13

20.String字符串 - 图14

20.String字符串 - 图15

20.String字符串 - 图16

20.String字符串 - 图17

20.String字符串 - 图18