随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)
一、String x="abc";和String y=new String("abc")区别:
String x="abc":变量x指向的是常量池的字符串常量对象。
String y=new String("abc"):变量y指向的是堆中的字符串对象,但堆中字符串对象需要以常量池中的字符串常量对象作为模板。所以此语句产生了两个对象,一个在常量池中,一个在堆中。
二、StringBuffe和String的使用区别:
package com.lovo;
public class Test {
public static void main(String[] args) {
// 字符串具有长度不可改变的特性,在对字符串对象做添加、删除、替换时不会更改原来的字符串对象,而是产生新的字符串对象。
String s = "abcdabc";
s.replace("abc", "9");
System.out.println(s);
// StringBuffer会在缓冲区中开辟一个空间,当对StringBuffer的内容作连接、替换、删除等操作时,不会产生新对象。
// 如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么
// 使用StringBuffer的toString()方法即可。
String x = "abc";
StringBuffer sb = new StringBuffer("abc");
test(x, sb);
System.out.println(x + " " + sb);
}
private static void test(String x, StringBuffer sb) {
x = x + "***";
sb.append("***");
}
}