您的位置:首页 > Web前端

String,StringBuffer,StringBuilder分析

2019-08-02 17:42 1261 查看

1、String:

  1. String类中每一个看起来会修改String值的方法,实际上都是创建了一个全新的String对象,以包含修改后的字符串内容,而最初的String对象则纹丝未动。
  2. String字符串不可变,线程安全,开销大,垃圾产生多

2、StringBuffer

  1. StringBuffer每一个修改方法,实际都是在操作StringBuffer初始化时所创建的对象
  2. StringBuffer字符串可变,线程安全,开销大

3、StringBuilder

  1. StringBuilder每一个修改方法,实际都是在操作StringBuilder初始化时所创建的对象
  2. StringBuilder字符串可变,非线程安全,开销小。

String,StringBuilder字符串可变测试

public static String uocase(String s){
return s.toUpperCase();
}

public static StringBuilder apendDemo(StringBuilder s){
return s.append("123");
}

public static void main(String[] args) {
String a = "asd";
System.out.println(a);

String aa = uocase(a);
System.out.println(aa);
System.out.println(a);

StringBuilder b = new StringBuilder("asdasd");
System.out.println(b);

StringBuilder bb = apendDemo(b);
System.out.println(b);
System.out.println(bb);

测试结果:
asd
ASD
asd

asdasd
asdasd123
asdasd123
}
  • 从上测试结果可以看出,对String字符串进行操作时,总是在不断创建新的String对象,用来接收String改变后的值
  • 而StringBuilder在操作时候,总是对StringBuilder原对象进行操作

以上是Java编程思想给出的一个示例思路。不够明显的话,看下面这个例子

public static void main(String[] args) {
//-----------String-------------------------
String param = "字符串";
System.out.println(param);
System.out.println(param.hashCode());

param = param+":demo";
System.out.println(param);
System.out.println(param.hashCode());

//------------StringBuilder-------------------------
StringBuilder stringBuilder = new StringBuilder("StringBuilder初始值");
System.out.println(stringBuilder);
System.out.println(stringBuilder.hashCode());

stringBuilder.append("拼接值");
System.out.println(stringBuilder);
System.out.println(stringBuilder.hashCode());

//-------------StringBuffer-----------------------------------
StringBuffer stringBuffer = new StringBuffer("StringBuffer初始值");
System.out.println(stringBuffer);
System.out.println(stringBuffer.hashCode());

stringBuffer.append("拼接值");
System.out.println(stringBuffer);
System.out.println(stringBuffer.hashCode());
}
输出结果:
字符串
23468387
字符串:demo
1137810842

StringBuilder初始值
780237624
StringBuilder初始值拼接值
780237624

StringBuffer初始值
205797316
StringBuffer初始值拼接值
205797316

HashCode:在 Java 应用程序执行期间,在对同一对象多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是将对象进行hashcode比较时所用的信息没有被修改。

  • 可以看出,只有String再进行操作后,HashCode码有变化。String创建了一个新对象接收,其他两种字符,依旧是在原对象上进行操作
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: