2017-11-02 20:02:06

String:代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。

字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。

*常用方法

Java 常用对象-String类_子字符串

Java 常用对象-String类_子字符串_02

Java 常用对象-String类_字面值_03

Java 常用对象-String类_java_04

  • String值不能被改变的理解
        String s = "Hello";

        s += "world";

        System.out.println(s);

这里的“Hello”,“world”,“Helloworld”会分别在字符串常量区分配内存。所以字符串并没有变。

  • 不同构造方法的区别
String s1 = new String("Hello");
String s2 = "Hello";
s1 == s2 //false
s1.equals(s2) //true

== :引用中的等号是判断地址值是否相等

equals() :默认情况下也是比较地址值,但是String类中重写了该方法,用来比较字符串的值

Java 常用对象-String类_字符串_05

  • "String+变量" 的操作无法在编译期间进行优化的解释

“String+变量”因为编译时无法进行优化,所以这一条语句的操作是在运行时进行的,且会产生新的对象,而不是直接从jvm的string池中获取。

java中String的+运算符编译后其实是转换成了这样的代码:
String b = new StringBuilder().append("a").append(bb).toString();
看下StringBuilder的toString方法,使用new String(...);来构造一个String对象。
String有两种构造方法,一种是new String,在jvm堆中分配,一种是String a="ab"这种方式,这种特殊的方式过程是这样的:JVM会先在string pool中去查找是否存在"ab"这样的字符串,如果存在就把引用地址返回,如果不存在,则构造一个并把它放到string pool中。
很明显这样的构造方法是使用了new来构造的,因此在jvm中的引用地址跟a肯定是不一样,你使用==来比较,比较的是它们的引用地址,它们肯定不相等,当然是false了。

  • 判断功能

public boolean equals(Object anObject):比较内容是否相同,区分大小写。

public boolean equalsIgnoreCase(String anotherString):比较内容是否相同,不区分大小写。

public boolean contains(CharSequence s):当且仅当此字符串包含指定的 char 值序列时,返回 true。

public boolean startsWith(String prefix):测试此字符串是否以指定的前缀开始。

public boolean endsWith(String suffix):测试此字符串是否以指定的后缀结束。

  • 获取功能

public int length():返回此字符串的长度。长度等于字符串中 Unicode 代码单元的数量。 // "中文".length()==2

public char charAt(int index):返回指定索引处的 char 值。

public int indexOf(String str, int fromIndex):返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。

public String substring(int beginIndex):返回一个新的字符串,它是此字符串的一个子字符串。该子字符串从指定索引处的字符开始,直到此字符串末尾。

public String substring(int beginIndex, int endIndex):返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的 beginIndex 处开始,直到索引 endIndex - 1 处的字符。因此,该子字符串的长度为 endIndex-beginIndex

  • 转换功能

public byte[] getBytes():使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。

public char[] toCharArray():将此字符串转换为一个新的字符数组。

public static String valueOf(int/char[]/double x):将任意类型的数据转成String。

public String toLowerCase():所有字符都转换为小写。

public String toUpperCase():所有字符都转换为大写。

public String concat(String str):拼接,类似于+。

  • 其他功能

public String replace(char oldChar, char newChar):返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。

public String replace(CharSequence target, CharSequence replacement):使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。该替换从字符串的开头朝末尾执行,例如,用 "b" 替换字符串 "aaa" 中的 "aa" 将生成 "ba" 而不是 "ab"。

public String trim()返回字符串的副本,忽略前导空白和尾部空白。

public int compareTo(String anotherString):按字典顺序比较两个字符串。如果参数字符串等于此字符串,则返回值 0;如果此字符串按字典顺序小于字符串参数,则返回一个小于 0 的值;如果此字符串按字典顺序大于字符串参数,则返回一个大于 0 的值。

public int compareToIgnoreCase(String str):按字典顺序比较两个字符串,不考虑大小写。

public String[] split(String regex):根据给定正则表达式的匹配拆分此字符串。