潭州Java中级班(day_14)-String,Stringbuffer,Stringbuilder - 王育奕
潭州Java中级班(day_14)-String,Stringbuffer,Stringbuilder
1. String
- String类代表字符串。 Java程序中的所有字符串文字(例如“abc” )都被实现为此类的实例。
- 字符串不变; 它们的值在创建后不能被更改。 字符串缓冲区支持可变字符串。 因为String对象是不可变的,它们可以被共享。
重点知识点:
字符串与字节字符数组之间的转换
toCharArray()
valueOf(char[] data, int offset, int count)
substring(int beginIndex, int endIndex)
replace(CharSequencetarget,CharSequence replacement)
length()
indexOf(int ch)
isEmpty()
split(String regex)
endsWith(String suffix)
concat(String str)
trim()
compareTo()
String常用的属性和方法
package StringStringbufferStringbuilder; public class demoString { public static void main(String[] args) { //to_Array(); test_method(); } public static void to_Array() { String string="育奕育曦"; char[] cs=string.toCharArray();//字符串变成字符数组 System.out.println(cs); String string2=String.valueOf(cs);//字符数组变成字符串 System.out.println(string2); } public static void test_method() { String string="ABCDEABCDE"; int index=string.indexOf(\'A\');//字符对应的下标 System.out.println("index:"+index); int index2=string.indexOf(\'A\',3 );//从1下标开始找 System.out.println(index2); boolean bn=string.isEmpty(); System.out.println("判断str字符串是否为空:"+bn); //返回指定字符的最后一次出现的字符串中的索引。 int it=string.lastIndexOf(\'C\');//字符对应的下 System.out.println("it="+it); int length=string.length(); System.out.println("length="+length); String ss=string.replace(\'A\', \'水\'); System.out.println("ss="+ss); boolean bnn=string.startsWith(ss, \'A\'); System.out.println("bnn="+bnn); String string3=string.substring(1); System.out.println("string="+string3); String string4=string.substring(1,3);//1:起始下标, 3:重点下标,但是不包括下标。 System.out.println("string4="+string4); String string5=string.toLowerCase();//将所有的字母都小写 System.out.println("string5="+string5); String string6="javase"; String string7=string6.toUpperCase();//将所有的字母都大写 System.out.println("string7="+string7); String string8=" 纸 箱 和 猫 ";//"" System.out.println("string8="+string8); //返回一个字符串,其值为此字符串,并删除任何前导和尾随空格。 String string9=string8.trim(); System.out.println("string9="+string9); } }
2. StringBuffer
- 线程安全,同步的,有锁,可变的字符序列。 字符串缓冲区就像一个String ,但可以修改。 在任何时间点,它包含一些特定的字符序列,但可以通过某些方法调用来更改序列的长度和内容。
3. StringBuilder
- 一个可变的字符序列。 此类提供与StringBuffer的API,但不保证同步,就是没有锁,那线程就不安全
package StringStringbufferStringbuilder; /** * 这个类主要是讲String,StringBuffer,StringBuilder * @author Mike * String : 一个不可变的字符串,效率最低 * StringBuffer: 线程安全,可变的字符序列. 效率低 * StringBuilder: 一个可变的字符序列。 此类提供与StringBuffer的API,但不保证同步,线程不安全。效率高 */ public class demo01 { public static void main(String[] args) { // StringBuffer stringBuffer=new StringBuffer(); // // stringBuffer.append("育奕 "); // stringBuffer.append("育曦 "); // stringBuffer.append("Mike"); // // System.out.println(stringBuffer); // // int a=stringBuffer.capacity();//返回当前容量。 // System.out.println("stringbuffer的容量是:"+a); // // int b=stringBuffer.charAt(0);//返回 char在指定索引在这个序列值。 // System.out.println("stringbuffer的第一个元素是:"+b); // // stringBuffer.delete(0, 2);//删除此序列的子字符串中的字符。 // System.out.println(stringBuffer); // // stringBuffer.deleteCharAt(0); // System.out.println(stringBuffer);//删除 char在这个序列中的指定位置。 // // // stringBuffer.insert(0, "育奕");//在下标0添加字符串 // System.out.println(stringBuffer); // // stringBuffer.replace(0, 2, "Allen");//用新的字符串替换下标2到4(不包括4)的字符串对应的字符串 // System.out.println(stringBuffer); // // stringBuffer.reverse(); //字符串反转 // System.out.println(stringBuffer); // // stringBuffer.setCharAt(0, \'醋\');//替换下标0对应的字符串 // System.out.println(stringBuffer); //testStringBuffer();//644 //testString();//27899 testStringBuilder();//20 } public static void testStringBuffer() { StringBuffer stringBuffer=new StringBuffer("育奕"); //获取当前时间毫秒数 long start=System.currentTimeMillis(); for (int i = 0; i < 10000000; i++) { stringBuffer.append("育奕"); } //获取当前时间毫秒数 long end=System.currentTimeMillis(); System.out.println("StringBuffer添加100000个YUYI:"+(end-start)); } /** * 这就是String添加100000个南浔花去的时间 */ public static void testString(){ String string="育奕"; //获取当前时间毫秒数 long start=System.currentTimeMillis(); for(int i=0;i<100000;i++){ string=string+"育奕";//创建10万堆 } //获取当前时间毫秒数 long end=System.currentTimeMillis(); System.out.println("String添加100000个南浔:"+(end-start)); } public static void testStringBuilder(){ StringBuilder stringBuilder=new StringBuilder("育奕"); //获取当前时间毫秒数 long start=System.currentTimeMillis(); for (int i = 0; i < 100000; i++) { stringBuilder.append("南浔"); } //获取当前时间毫秒数 long end=System.currentTimeMillis(); System.out.println("stringBuilder添加100000个南浔:"+(end-start)); } }
4.String,Stringbuffer,Stringbuilder三者的联系和区别
String : 一个不可变的字符串,效率最低
StringBuffer: 线程安全,可变的字符序列. 效率低
StringBuilder: 一个可变的字符序列。 此类提供与StringBuffer的API,但不保证同步,线程不安全。效率高
5.==和equals的区别
==:是比较地址值(就是堆的盒子名)
equals:是比较地址里面的值,就是盒子里面的值。
package StringStringbufferStringbuilder; /* * ==:是比较地址值(就是堆的盒子名) * equals:是比较地址里面的值,就是盒子里面的值。 */ public class demo01Equals { public static void main(String[] args) { String string1="育奕"; String string2="育奕";//首先去找,如果有,就不生成新的,如果没有,就生成新的。 String string3=new String("育奕"); String string4=new String("育奕"); System.out.println("string1==string2"+(string1==string2)); System.out.println("string1==string3"+(string1==string3)); System.out.println("string1==string3"+(string3==string4)); System.out.println("string1.equals(string2)"+string1.equals(string2)); System.out.println("string1.equals(string3)"+string1.equals(string3)); System.out.println("string3.equals(string4)"+string3.equals(string4)); // string1==string2true // string1==string3false // string1==string3false // string1.equals(string2)true // string1.equals(string3)true // string3.equals(string4)true } }