JAVA源码分析(一)——String

时间:2023-02-26 00:13:55

String的源码分析

Java中String不是基本数据类型,而是一种特殊的类。String代表的是不可变的字符序列,为不可变对象,一旦被创建,就不能修改它的值,对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去
从类的继承和接口实现来看:
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {

上面为String的定义:
首先 Final修饰了 String 说明 String类只能用不能被继承 终极类。 String还实现了序列化接口(Serializable)还有排序接口(Comparable),字符操作接口(CharSequence)。
看看 构造函数:
JAVA源码分析(一)——String
  String有15个构造函数 其中有两个是过时方法。
String中方法有就是这几个方面:

     1、字符串比较

         equals() ------判断内容是否相同。

         compareTo() ------判断字符串的大小关系。

         compareToIgnoreCase(String int) ------在比较时忽略字母大小写。

         == ------判断内容与地址是否相同。

         equalsIgnoreCase() ------忽略大小写的情况下判断内容是否相同。

         reagionMatches() ------对字符串中的部分内容是否相同进行比较(详情请参考API)。

     2、字符串查找

         charAt(int index) ------返回指定索引index位置上的字符,索引范围从0开始。

         indexOf(String str)------从字符串开始检索str,并返回第一次出现的位置,未出现返回-1。

         indexOf(String str,int fromIndex);------从字符串的第fromIndex个字符开始检索str。

         lastIndexOf(String str)------查找最后一次出现的位置。

         lastIndexOf(String str,int fromIndex)----从字符串的第fromIndex个字符查找最后一次出现的位置。

         starWith(String prefix,int toffset)-----测试此字符串从指定索引开始的子字符串是否以指定前缀开始。

         starWith(String prefix)------测试此字符串是否以指定的前缀开始。

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

     3、字符串截取

        public String subString(int beginIndex)------返回一个新的字符串,它是此字符串的一个子字符串。

         public String subString(int beginIndex,int endIndex)------返回的字符串是从beginIndex开始到endIndex-1的串。

     4、字符串替换

         public String replace(char oldChar,char newChar)。

         public String replace(CharSequence target,CharSequence replacement)------把原来的etarget子序列替换为replacement序列,返回新串。

         public String replaceAll(String regex,String replacement)------用正则表达式实现对字符串的匹配。注意replaceAll第一个参数为正则表达式。




String中方法都比较简单。 特殊的地方 就是传说中的字符串常量池  每当我们创建一个字符串对象时,首先就会检查字符串池中是否存在面值相等的字符串,如果有,则不再创建,直接放回字符串池中对该对象的引用,若没有则创建然后放入到字符串池中并且返回新建对象的引用。这个机制是非常有用的,因为可以提高效率,减少了内存空间的占用。所以在使用字符串的过程中,推荐使用直接赋值(即String s=”aa”),除非有必要才会新建一个String对象(即String s = new String(”aa”))。