String
Posted draymond
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了String相关的知识,希望对你有一定的参考价值。
hashCode
public int hashCode() { int h = hash; if (h == 0 && value.length > 0) { //hash 默认值为0(此时还没有计算hash) && String中的字节数组有值(使用 String str="avc"; hash初始值为0,使用new String("avc"),构造时计算) char val[] = value; for (int i = 0; i < value.length; i++) { h = 31 * h + val[i]; //为什么使用31? https://www.cnblogs.com/nullllun/p/8350178.html } hash = h; } return h; }
toCharArray
public char[] toCharArray() { // Cannot use Arrays.copyOf because of class initialization order issues char result[] = new char[value.length]; System.arraycopy(value, 0, result, 0, value.length); return result; }
System中的方法 src 原数组 srcPos 从元数据的起始位置开始 dest 目标数组 destPos 目标数组的开始起始位置 length 要copy的数组的长度 public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
getChars
public void getChars(int srcBegin, int srcEnd, char dst[], int dstBegin) { if (srcBegin < 0) { throw new StringIndexOutOfBoundsException(srcBegin); } if (srcEnd > value.length) { throw new StringIndexOutOfBoundsException(srcEnd); } if (srcBegin > srcEnd) { throw new StringIndexOutOfBoundsException(srcEnd - srcBegin); } System.arraycopy(value, srcBegin, dst, dstBegin, srcEnd - srcBegin); }
toCharArray 与 getChars 都是调用了 System.arraycopy
equals
重写了方法,先判断==,再判断是否为String类型,再判断长度相等,再判断每一个元素
public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String) anObject; int n = value.length; if (n == anotherString.value.length) { char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } } return false; }
2.3 length 字节数组的大小 2.4 isEmpty 2.5 charAt 2.6 codePointAt 对应索引位置的 ascII码表(中文)或Unicode代码点(英文) 2.7 equals 重写了方法,想判断==,再判断是否为String类型,再判断长度相等,再判断每一个元素 2.8 contentEquals 参数传 StringBuffer 和 StringBuilder ,对线程不安全的加锁,所以不好用 2.9 equalsIgnoreCase 2.10 compareTo 用字符串1跟字符串2作比较,如果字符串1的字典顺序在字符串2前面,则返回一个负数。若在后面,则返回一个正数。若两个字符串的字典顺序相同,则返回0。 排序的时候使用 2.11 compareToIgnoreCase 2.12 regionMatches 从当前字符串的firstStart位置开始,取一个长度为len的子串;然后从另一个字符串other的otherStart位置开始也取一个长度为len的子串,然后比较这两个子串是否相同,如果这两个子串相同则返回true,否则返回false 2.13 startsWith(String prefix, int toffset) 测试源字符串是否从索引toffset处开始以字符串prefix开始 2.14 indexOf 2.15 lastIndexOf 2.16 substring 2.17 concat 2.18 replace 2.19 matches 该方法用来判断这个字符串是否匹配给定的正则表达式 2.20 replaceFirst 2.21 replaceAll 2.22 split 2.23 join 2.24 toLowerCase 2.25 toUpperCase 2.26 trim 2.27 toString 2.28 valueOf 2.29 format 字符串格式化 https://segmentfault.com/a/1190000019350486
以上是关于String的主要内容,如果未能解决你的问题,请参考以下文章
java StringString.concat和StringBuilder性能对比
Cpp读写文件CString转StringString转CString
实用类StringString类方法的应用案例:查找判断指定字符出现的次数和位置
C++初阶:STL —— stringstring类 | 浅拷贝和深拷贝(传统写法和现代写法) | string类的模拟实现