关于String的一些使用细节

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

发布了54 篇原创文章 · 获赞 36 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/XlxfyzsFdblj/article/details/84338979