您的位置:首页 > Web前端

Java中的String,StringBuilder,StringBuffer三者的区别

2019-04-06 18:10 441 查看
  • String

    通过api可以看到String是字符串常量,常量是不可以被修改的,所以String对象一旦被创建是不能改变的,但是下面的代码明明改变了,其实这只是一种假 4000 象。jvm实际上是这样解析的:先在字符串常量池创建一个对象str赋值asd,然后在创建个对象赋值asdas第一个str就会垃圾回收机制回收,所以String对象一旦被创建是不能改变,java String对象实际上是一个不断被创建然后被回收的过程。所以其执行速度是最慢的,但是不可变也注定其线程是安全的。
package demo3;

public class StringDemo {

public static void main(String[] args) {
String str = "asd";
System.out.println(str);
str = str+"as";
System.out.println(str);
}
}
package demo3;

public class StringBufferDemo {
public static void main(String[] args) {
String str = "hello,world";
StringBuffer sb = new StringBuffer("你好,世界");
str.replace('h','H');
System.out.println(str);

sb.replace(0,2,"hello");
System.out.println(sb);

}
}

通过代可以直观的看出String为常量

  • StringBuilder和StringBuffer
    StringBulider和StringBuffer的对象是变量,对变量进行操作就是直接改变变量的值,而不进行创建回收,所以速度要比String快的多。
    二者之间的区别就在于线程安全上:
    StringBuffer:线程安全的可以被多个线程安全使用,其方法大都采用了 synchronized 关键字进行修饰,因此是线程安全的,
    StringBuilder:线程不安全的,而 StringBuilder 没有这个修饰,可以被认为是线程不安全的。 因此其速度也是最快的

总结:

  1. 三者在执行速度方面的比较:StringBuilder > StringBuffer > String
  2. String:字符串常量 如果要操作少量的数据用 = String
  3. StringBuffer:字符串变量 如果要操作少量的数据用 = String
  4. StringBuilder:字符串变量 如果要操作少量的数据用 = String

String方法使用

package demo3;

public class StringDemo {

public static void main(String[] args) {

//String类的构造方法
byte[] a = {'1','2','3'};
char[] c = {'1','2'};
String c1 = new String(c);      //将字符数组转换成字符串
String a1 = new String(a);      //将byte数组转换成字符串
String s1 = new String(new StringBuffer("wwe"));//将StringBuffer或StringBuilder转换成字符串

//具体方法

System.out.println(a1.charAt(1));  //返回字符串指定索引出的值
System.out.println(a1.compareTo("a"));//按照按字典顺序比较两个字符串。返回两个字符串中第一个不同的字符的ascII码差值。 不同于equals
System.out.println(a1.concat("232")); //jiang指定的字符串连接到字符串的尾部
System.out.println(a1.contains("123"));//判断是否含指定的字符串
System.out.println(a1.endsWith("23")); //测试字符串是否已指定的字符结尾
System.out.println(a1.equals("123"));  //将此字符串与指定对象进行比较。

System.out.println(String.format("%s",a1));//类似于c语言 将字符串进行格式化

char[] c4 = new char[12];
a1.getChars(1,3,c4,0);  //将此字符串中的字符复制到目标字符数组中
for (char c0:c4) {
System.out.println(c0);
}

System.out.println(a1.length());//返回指定字符串的长度、

System.out.println(a1.replaceAll(a1,"dfg")); //替换字符串中的值
System.out.println(a1.replace('1','0'));//替换指定字符
String sp = "a|b|c";
for (String s : sp.split("\\|")) {   //字符分割 注意特殊字符转义
System.out.println(s);
}

char[] c5 = a1.toCharArray(); //将字符串转换成数组
a1.toUpperCase(); //转换成大写
a1.trim(); //去掉空格
String.valueOf(1); //将参数转换为字符串

}
}

StringBuffer

package demo3;

public class StringBufferDemo {
public static void main(String[] args) {
StringBuffer stringBuffer = new StringBuffer("梵蒂冈"); //初始容量为16个字符
System.out.println(stringBuffer);
System.out.println(stringBuffer.capacity());  //所以这里输出的是19
System.out.println(stringBuffer.append("fds"));
System.out.println(stringBuffer.delete(3,4)); //删除此序列的子字符串中的字符。
System.out.println(stringBuffer.insert(3,"f")); //将字符串插入到此字符序列中
System.out.println(stringBuffer.reverse());//反转
stringBuffer.setCharAt(0,'x');//设置指定索引出的值
System.out.println(stringBuffer);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: