JDK6和JDK7中substring的原理及区别
https://blog.csdn.net/renfufei/article/details/14058047
replaceFirst、replaceAll、replace
- replace 用replacement替换所有的target,两个参数都是字符串或者是字符。
replace(CharSequence target, CharSequence replacement)
replace(char oldChar, char newChar)
- replaceAll 用replacement替换所有的regex匹配项,regex很明显是个正则表达式,replacement是字符串。
replaceAll(String regex, String replacement)
- replaceFirst 基本和replaceAll相同,区别是只替换第一个匹配项。
replaceFirst(String regex, String replacement)
String对"+"的重载
https://www.cnblogs.com/wqff-biubiu/p/9167346.html
String.valueOf和Integer.toString的区别
String.valueOf()可以应用到任何数据类型,且不会有异常报出。
// String.valueOf(int i) 底层就是调用Integer.toString(i)方法。
public static String valueOf(int i) {
return Integer.toString(i);
}
// Integer.toString(i)方法
public static String toString(int i) {
if (i == Integer.MIN_VALUE)
return "-2147483648";
int size = (i < 0) ? stringSize(-i) + 1 : stringSize(i);
char[] buf = new char[size];
getChars(i, size, buf);
return new String(buf, true);
}
字符串的不可变性
我们先看以下代码
s1和s2引用的是同一个对象,为什么改变s1的值,s2的值并不会改变呢?
这里就涉及了Java中String对象的不可变性,什么叫做不可变性呢,简单的说就是一旦一个String对象被创建并被赋值(初始化)这个对象的值就不会改变。一旦一个String对象在内存中创建,它将是不可改变的,所有的String类中方法并不是改变String对象自己,而是重新创建一个新的String对象。
也就是说s1=“open”,并不是改变了原有对象的值,而是创建了一个新的字符串对象,这个对象的值是open,并把这个对象的引用赋值给了s1。
String s1 = new String("test");
String s2 = s1;
s1 = "open";
System.out.println(s1 + " " + s2); // open test
正因为String对象的不可变性,如果需要对字符串进行大量的修改、添加字符、删除字符等操作尽量不要使用String对象,因为这样会频繁的创建新的对象导致程序的执行效率下降
这时我们可以使用字符串生成器StringBuilder。
StringPool
https://www.cnblogs.com/fangfuhai/p/5500065.html