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 没有这个修饰,可以被认为是线程不安全的。 因此其速度也是最快的
总结:
- 三者在执行速度方面的比较:StringBuilder > StringBuffer > String
- String:字符串常量 如果要操作少量的数据用 = String
- StringBuffer:字符串变量 如果要操作少量的数据用 = String
- 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); } }
相关文章推荐
- Java中的String,StringBuilder,StringBuffer三者的区别
- Java中的String,StringBuilder,StringBuffer三者的区别
- java中String, StringBuilder, StringBuffer三者的区别
- java中String、StringBuilder、StringBuffer三者的区别
- Java中的String,StringBuilder,StringBuffer三者的区别
- Java: String, StringBuilder和StringBuffer 三者之间的区别
- [Java] 中的String,StringBuilder,StringBuffer三者的区别
- 探索Java中String、StringBuilder、StringBuffer三者的区别
- Java中的String,StringBuilder,StringBuffer三者的区别
- Java______String、StringBuilder、StringBuffer 三者区别
- Java中的String,StringBuilder,StringBuffer三者的区别
- Java中的String,StringBuilder,StringBuffer三者的区别
- Java中的String,StringBuilder,StringBuffer三者的区别
- Java中的String,StringBuilder,StringBuffer三者的区别
- Java中的String,StringBuilder,StringBuffer三者的区别
- Java中的String,StringBuilder,StringBuffer三者的区别
- Java中的String,StringBuilder,StringBuffer三者的区别
- 关于Java中的String,StringBuilder,StringBuffer三者的区别
- (转)Java中的String,StringBuilder,StringBuffer三者的区别
- Java中的String,StringBuilder,StringBuffer三者的区别