1.java.lang包 无需导包
    没有任何继承关系 实现三个接口Serializable CharSequence Comparable

    *2.String的构造方法创建对象
    String是一个比较特殊的引用数据类型 可以像基本类型一样 创建 赋值
    2.1 String str1 = “abc”;//直接将字符串常量赋值给str1(字符串常量)
    2.2 String str2 = new String();//无参数构造方法创建空的对象
    2.3 String str3 = new String(“abc”);//利用带String类型的参数创建abc对象
    2.4 String str4 = new String(byte[]);//利用带byte数组类型的参数创建对象 将数组中的每一个元素转化为对应的char 再把char组合成String

    byte[] value = new byte[]{65,97,48};
    String str = new String(value);//输出Aa0 即对应的Unicode码
    2.5 String str5 = new String(char[]);//利用带char数组类型的参数创建对象 将数组中的每一个char元素拼接成最终的String

    char[] value = {‘a’,’b’,’c’};
    String str = new String(value);//输出abc
    …………..上面的构造方法都是比较常用的 剩余的就不一一列举

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

    *4.常用方法
    第一梯队(重写的方法)
    equals(); hashCode(); compareTo(); toString();
    第二梯队(常用)
    charAt(); codePointAt(); length(); concat(); split();
    subsring(); indexOf(); lastIndexOf(); toCharArray(); getByte();
    matches(); replace(); valueOf();
    第三梯队(一般不常用)
    contains(); toUpperCase(); toLowerCase(); isEmpty();
    startsWith(); endsWith(); trim();

    4.1 boolean = equals(Object obj);
    //继承自Object类 但是重写了 比较两个字符串中的字面值是否相等
    4.2 int = hashCode();
    //继承自Object类 但是重写了
    (通常重写了equals方法时会伴随着重写hashCode方法)
    4.3 int = compareTo(String str);
    //实现自Comparable接口 且实现了 按照字典(UniCode编码)索引的顺序比较
    如:
    String str1 = “abc”;
    String str2 = “ab”;
    System.out.println(str1.compareTo(str2));//返回长度差 1
    //按照两个字符串中长度较短的那个作为比较循环的次数
    //挨个比较元素 str1[i] - str2[i]//直到串中第一个不相等字符的位置 来比较二者的Unicode码
    //如果长度相等 且串中内容一样 则返回值为0
    //长度不等 但是比较完后的内容完全一样 则返回的是长度差
    String str3 = “abc”;
    String str4 = “aeb”;
    System.out.println(str3.compareTo(str4));//-2
    //如果长度相等 且串中内容有差别 找到串中第一个不相等字符的位置 返回二者的Unicode码差值
    4.4 String = toString();
    //继承自Object类 但是重写了 输出的是字符串的字面值

    Test t = new Test(); //创建类的对象
    System.out.println(t);//输出Test@1b6d3586 即为 类名@hashCode
    String str = “abcdefabc”;
    System.out.println(str);//将toString方法重写了 输出abcdefabc


    4.5 char = charAt(int index);
    //返回给定index对应位置的那个char值 如”abc” 0号位置 —->输出 a
    4.6 int codePointAt(int index);
    //返回给定index对应位置的那个char值对应的Unicode的码 如”abc” 0号位置 —->输出 97
    4.7 int = length();
    //返回字符串的长度
    (注意区分数组的length是属性 String的leng()是方法)
    4.8 String = concat(String);
    //将给定字符串拼接在当前字符串后

    String str = “abcdef”;
    //abcdef的String对象 放在字符串常量池里 即属性char[] value中存着abcdef
    //final修饰的数组长度不能改变 数组地址不让变 数组属性私有
    str.concat(“g”);
    System.out.println(str);//输出的是abcdef
    str = str.concat(“g”);
    //创建了一个新的String对象
    //将上一个 String对象的value值依次取出来 存入新创建的String对象的value属性里 再将g放在后面
    //即我们改变的是我们定义的str变量的引用 并没有操作属性本身
    //所以我们需要接受返回值才能看到效果
    System.out.println(str);//输出的是abcdefg
    //这体现了String的不可变特性

    若频繁需要拼接字符串—->通常使用的是StringBuilder/StringBuff

    4.9 boolean = contains(CharSequence s);
    //判断给定的s是否在字符串中存在

    String str = “abcdef”;
    boolean f1 = str.contains(“cd”);//判断连着的字符串是否存在 存在返回true
    System.out.println(f1);
    boolean f2 = str.contains(“ad”);//a与d不连着 所以返回false
    System.out.println(f2);
    4.10 boolean = startsWith(String);
    //判断此字符是否是已xx开头
    boolean = endsWith(String);
    //判断此字符是否是已xx结尾
    4.11 byte[] = getBytes(); //注意如果byte类型的数组存的是中文 输出的结果会出问题(一个汉字两字节)

    char[] = toCharArray();
    //这两个方法都是将当前字符串转换成数组
    4.12 int = indexOf(String/char[,int fromIndex]);//共有四个方法重载
    //找寻给定元素在字符串中第一次出现的位置

    String str = “abcdefabc”;
    int index = str.indexOf(“abc”,3);//返回 6
    //找abc 从索引为3的位置往后找 若不存在 返回-1
    //返回的值是abc在整个String数组中的索引位置(按首字母位置)
    int index1 = str.indexOf(98,7);//返回 -1
    //98对应的Unicode码的元素
    int = LastIndexOf();//共有四个方法重载
    //找寻给定元素在字符串中最后一次出现的位置
    4.13 boolean = isEmpty();
    //判断字符串是否是空字符串

    String str = null;
    boolean x = str.isEmpty();//空指针异常 对象引用是空的不要紧 但是不能用空引用.
    String str1 = “”;
    boolean y = str1.isEmpty();//返回true
    4.14 replace(char oldChar,char newChar);
    //将旧字符串中的字符全部换成指定的字符的 换的只能是单个字母
    如 “abcba” (‘a’,’c’)—->输出 cbcbc
    replace(CharSequence target,CharSequence replacement);
    //将旧字符串中的字符换成新的 可以换给定的字符串(比较常用)
    如 “abcbab” (“ab”,”love”)—->输出 lovecblove
    replaceAll();
    //把指定的旧的字符串 全部 替换成给定的新的字符串
    //方法同上
    replaceFirst();
    //替换的是第一次出现的那个字符串

    String str = “中国很强,非常强”;
    str = str.replace(“强”,”棒”);//输出 中国很棒,非常棒
    str = str.replaceAll(“棒”,”猛”);//输出 中国很猛,非常猛
    str = str.replaceFirst(“很猛”,”good”);//输出 中国good,非常猛
    4.15 String[] = split(String regex[,int limit]);
    //按照要求拆分字符串
    String str = “a-b-c-d”;
    String[] value = str.split(“-“,3);//输出 a b c-d
    //按 - 将字符串拆分成三段
    4.16 String[] = substring(int beginIndex[,endIndex]);
    //按照要求截取字符串 从beginIndex开始 到endIndex结束 若不写endIndex 默认到结尾
    String str = “abcdefgh”;
    str = str.substring(3,5);//输出 de
    //从三号索引 包括三号 到五号索引 不包括五号 左闭右开
    4.17 String = toUpperCase();
    String = toLowerCase();
    //将字符串全部转换成大/小写
    4.18 String = trim();
    //将字符串 前后的 空格去掉 字符串中间的去不掉
    4.19 boolean = matches(String regex);
    //regular 有规律的 expression表达式 regex正则表达式

    4.20 String = valueOf();//参数可以是int char float 等
    //将给定的元素转换成字符串形式