Advertisement

Java String 的特点是什么?它有哪些重要的方法?

阅读量:

本课时的问题是:String 是如何实现的?它有哪些重要的方法?典型回答以主流的 JDK 版本 1.8 来说,String 内部实际存储结构为 char 数组,源码如下:cpublic final class String implements java.io.Serializable, Comparable<String>, CharSequence { // 用于存储字符串的值 private final char value[]; // 缓存字符串的 hash code private int hash; // Default to 0 // ......其他内容}String 源码中包含下面几个重要的方法。1. 多构造方法String 字符串有以下 4 个重要的构造方法:c// String 为参数的构造方法public String(String original) { this.value = original.value; this.hash = original.hash;}// char[] 为参数构造方法public String(char value[]) { this.value = Arrays.copyOf(value, value.length);}// StringBuffer 为参数的构造方法public String(StringBuffer buffer) { synchronized(buffer) { this.value = Arrays.copyOf(buffer.getValue(), buffer.length()); }}// StringBuilder 为参数的构造方法public String(StringBuilder builder) { this.value = Arrays.copyOf(builder.getValue(), builder.length());}其中,比较容易被我们忽略的是以 StringBuffer 和 StringBuilder 为参数的构造函数,因为这三种数据类型,我们通常都是单独使用的,所以这个小细节我们需要特别留意一下。2. equals() 比较两个字符串是否相等equals 方法是 java.lang.Object 类的方法。有两种用法说明:(1)对于字符串变量来说,使用“”和“equals()”方法比较字符串时,其比较方法不同。“”比较两个变量本身的值,即两个对象在内存中的首地址。“equals()”比较字符串中所包含的内容是否相同。 比如:bashString s1,s2,s3 = "abc", s4 ="abc" ;s1 = new String("abc");s2 = new String("abc");那么:s1==s2 是 false //两个变量的内存地址不一样,也就是说它们指向的对象不 一样,故不相等。s1.equals(s2) 是 true //两个变量的所包含的内容是abc,故相等。 3. compareTo() 比较两个字符串compareTo() 方法用于比较两个字符串,返回的结果为 int 类型的值,返回值是整型,它是比较对应字符的大小(ASCLL码顺序),如果第一个字符和参数的第一个字符不等,结束比较,返回他们之间的长度差值,如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个字符做比较,以此类推,直至比较的字符或被比较的字符有一方结束。如果参数字符串等于此字符串,则返回值0;如果此字符串小于字符串参数,则返回一个小于0的值如果此字符串大于字符串参数,则返回一个大于0的值说明:如果第一个字符和参数的第一个字符不等,结束比较,返回第一个字符的ASCII码差值。如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个字符做比较,以此类推,直至不等为止,返回该字符的ASCII码差值。 如果两个字符串不一样长,可对应字符又完全一样,则返回两个字符串的长度差值。在这里插入图片描述3. String 和 StringBuilder、StringBuffer 的区别因为 String 类型是不可变的,所以在字符串拼接的时候如果使用 String 的话性能会很低,因此我们就需要使用另一个数据类型 StringBuffer,它提供了 append 和 insert 方法可用于字符串的拼接,它使用 synchronized 来保证线程安全,如下源码所示:

全部评论 (0)

还没有任何评论哟~