java-String的源码解析

想要将String这个java基础的类吃透,在2019/03/12晚上10点:没有头绪,不知道怎么开头,简单粗暴一点吧,我要将里面的每个方法吃透--------然后再取java-api 上面翻看一遍哪里有偏差http://www.runoob.com/manual/jdk1.6/java/lang/String.html#format(java.util.Locale,%20java.lang.String,%20java.lang.Object...)

  • String是一个final类型的类: 那就意味着不能被继承
访问修饰符返回值方法名(参数)方法介绍默认值
privatefinal charvalue[]保存字符串的char数组“”
privateinthash字符串的hash值0
public构造方法String()构造方法,设置初始值 value[] = """"
public构造方法String(String original)构造方法,设置初始值为 传入的String值 originaloriginal
public构造方法String(char value[])构造方法,设置初始值为传入的char数组值value[]
public 构造方法String(char value[], int offset, int count )构造方法,设置初始值为传入的char数组的 第offset位开始,第 offset+count 结束,截取的这个字符数组value[]部分
public构造方法String(int[] codePoints, int offset, int count)构造方法:传入int[] 数组,内部存放的是unicode,最终要被转成字符串, 
public构造方法String(byte byte[], int offset, int length, String charsetName)创建一个字符串,字符串内容是取传入的byte[]值的第offset位到offset+length位,编码格式是charsetName, 
。。。。。。。。。省略5个和上一个方法类似操作 byte[] 的构造方法 
public构造方法String(StringBuffer buffer)构造方法:将Stringbuffer的内容value[] 拷贝到String 的value[] 中

 

public构造方法String(StringBuilder build)构造方法: 将StringBUild的内容copy到String中,没有用上synchronized 
publicintlength()返回字符串的长度 
publicbooleanisEmpty()判断字符串是否为空,通过length来判断 
publiccharcharAt(int index)返回第index位置的char值 
publicintcodePointAt(int index)返回第index位置的char的unicode值 
publicintcodePointBefore(int index)返回第index位置的前一个位置的unicode值 
public int codePointCount(int beginIndex,int endIndex)

大部分情况都和length()类似,但是本质上还是有区别

https://blog.youkuaiyun.com/u012425381/article/details/38760179

 
publicintoffsetByCodePoints(int index, int codePointOffset)  
publicvoidgetChars(char dst[], int dstBegin)将String字符串中的字符,放到dst[] 中, 位置是从dst[] 数组的第dstBegin开始 
publicvoidgetChars(int srcBegin. int srcEnd, char dst[], int dstBegin)将String字符串从第srcBegin位置开始到srcEnd位置结束的字符插入到dst[] ,位置是从dst[] 的 dstBegin 开始 
publicbyte[]getBytes(Charset charset)将String转成指定格式charset 的byte[] ,返回 
。。。。。。。。。省略一个方法,不传Charset值表示默认utf-8格式返回 
publicbooleanequals(Object anObject)重写了Object方法,比较2个字符串的内容是否一致 
publicbooleancontentEquals(StringBuffer sb)判断String的内容是否和传入的StringBUffer的内容一样 
publicbooleancontentEquals(CharSequence cs)判断String的内容是否和cs的内容一致 
public booleanequalsIgnoreCase(String anotherString)比较2个字符串是否在忽略大小写的情况下一致 
publicintcompareTo(String anotherString)表示字符串的排序规则,默认是降序排列,比较的是每个字符的Unicode值 
public intcompareToIgnoreCase(String str)表示字符串的排序规则,但是忽略大小写 
 publicbooleanregionMatches(boolean ignoreCase, int toffset, int String other, int ooffset , int len)

表示比较String 指定某一块区域 是否和 传入的other字符串完全相等,ignoreCase 表示是否忽略大小写

http://www.runoob.com/java/java-string-regionmatches.html

 
publicbooleanstartsWith(String prefix,int toffset)判断是否String是以 prefix 开头, toffset表示 String 从头的什么位置开始比较 
public booleanstartWith(String prefix)判断String是否以prefix开头,其实调用的也是上面的方法,就是toffset设置成 0 
publicbooleanendWith(String suffix)判断String 是否以suffix结尾 
publicinthashCode()返回字符串的hash值 
publicintindexOf( int ch)返回从第一位开始查找,Unicode为 ch的值所在的位置  
publicintlastIndexof(int ch)返回 匹配Unicode值 ch 最后一个char 位置 
publicintindexof(String str)返回查到的第一个匹配上str的位置 
publicint lastIndexof(String str)返回查到的最后一个匹配上str的位置 
publicStringsubstring(int beginIndex)切割字符串,从位置beginIndex开始 
publicStringsubstring(int beginIndex, int endIndex)切割字符串,从位置beginIndex开始,从endindex结束 
publiccharSequencesubSequence(int beginIndex, int endIndex)切割字符串功能同上,就是返回值charSequence 不同,但是这个返回值是String实现的接口 
publicString concat(String str)将字符串str合并到原来的字符串上去,内部其实新new了一个字符串 
publicStringreplace(char oldchar, char newChar)将字符串内所有的oldChar替换成newChar,并且返回替换后的值 
publicbooleanmatches(String regex)正则表达式regex判断是否和该string匹配上 
public booleancontain(charSequence)判断字符串内是否包含了传入的charSequence 
publicStringreplaceFirst(String regex,String replacement)替换掉符合正则表达式的第一块字符快,替换成传入的replaceMent 
publicString replaceAll(String regex, String replacement)替换掉所有符合regex规则的字符快,替换成replacement 
publicStringreplace(CharSequence target,CharSequence replacement)替换掉所有target的值,全都换成replacement 
publicString[]split(String regex, int limit)

切割字符串,根据regex的规则切割,返回 切割后的字符数组,切割到第limit个就不再切割后面的字符串整体作为一块

(limit = 0 表示全部切割)

 
。。。。。。。。。下面有几个1.8加入的新方法,让我们来瞅一瞅 
publicstatic  stringjoin(CharSequence delimiter, CharSequence... elements)静态方法:拼接CharSequence,涉及到StringJoiner 类(1.8加入),内部的add方法涉及到的下一层是StringBuilder的append,最终返回一个拼接好的CharSequence 然后toString返回  
。。。    
publicStringtoLowerCase(Locale locale)根据给定的Locale 规则 将字符串转成小写 
public StringtoLowerCase()根据系统默认的规则将字符串转成小写 
publicStringtoUpperCase(Locale locale)根据给定的Locale 规则 将字符串转成大写 
publicStringtoUpperCase()根据系统默认的规则,将字符串转成大写 
publicStringtrim()去除掉字符串首尾的空格 
publicStringtoString返回自己 
publicchar[]toCharArray()返回字符串的char[] 值 
publicstatic  Stringformat(String format, Object...args)使用指定的格式字符串和参数返回一个格式化字符串。 
。。。。。。。。。这里其实还有几个format的方法,可以自行领悟 
   接下来就是几个比较常用的static方法了 
publicstatic StringvalueOf(Object obj)这里会去调用obj的toString()方法来返回具体信息 
  valueOf(char data[])A 
  valueOf(char data[], int offset, int count)B 
  copyValueOf(char data[], int offset, int count)

C   我看实现体 B 和 C 是一模一样的

 
  copyValueOf(char data[])D   实现体 A 和 D 是一模一样的 
  ...再有就是一些基本数据类型的valueOf 
publicnative Stringintern()调用本地方法,返回的是String在内存中指向的地址对象 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值