Java基础 String/StringBuff/StringBuilder 常用操作方法复习/内存分析/三者的效率比较

时间:2024-12-05 08:06:49

附:jdk1.8使用IDEA安装.创建.使用JUnit单元测试

笔记总结:

 /**String 复习
* 1.像C++这样的char arr[]="..." 的方式无法声明Java的String
* 2.a.compareTo(b),表示按字典序比较两个字符串a和b,结果小于0:a表示小于b,结果大于0:a表示大于b,结果等于0表示等于(值不确定)
* 3.equals() 判断相等
* 4.indexOf(String str) 返回指定子字符串在此字符串中第一次出现处的索引。
* lastindexOf(String str) 返回指定子字符串在此字符串中最后一次出现处的索引。
*5.valueof()可以将基本所有的Java数据类型转换为String 类
*
* 6.StringBuff 类,支持 append(), legth() , insert(),reverse()
/**StringBuffer
* 线程安全,可变的字符序列。 字符串缓冲区就像一个String ,但可以修改。 (初始化是16个字符)
* 在任何时间点,它包含一些特定的字符序列,但可以通过某些方法调用来更改序列的长度和内容。
* ---------------------------
*StringBuilder
    同样可变的字符序列,较新,效率远高于String ,高于StringBuffer!

简单的方法测试代码:

package Coding;

public class Main_of_Coding {
public static void main(String[] args) {
//1.String 的构造方法
String str1=new String("first String");
char arr[]= {'s','e','c','o','n','d',' ','S','t','r','i','n','g'};
String str2=new String(arr);
String str3=new String(arr,1,4); //起始点offset: 1 ,总统计count : 4
String str4=new String(str1+1); //数字1不表示移动地址,表示数字1加到str1的后面
System.out.println(" "+str1+"\t2: "+str2+"\t:3 "+str3+"\t:4"+str4);
//2.使用
str4=str1+str2;System.out.println(str4); //字符串链接
System.out.println(str1.charAt(0)+" "+str1.charAt(1)); //获取第i个字符! str1="aab";str2="ac";
System.out.println(str1.compareTo(str2)); // 按字典顺序比较两个字符串。
str1="666";str2="777";
System.out.println(str1.compareTo(str2));
//3.转换成字符数组
char a1[]=str1.toCharArray();
System.out.println(new String(a1)+" 1:"+a1[1]+" 2:"+a1[2]);
//4.字符串搜索
System.out.println("indexof66: "+str1.indexOf("66"));
System.out.println("lastindexof66: "+str1.lastIndexOf("66"));
// }
}

运行结果:

 first String    2: second String    :3 econ    :4first String1
first Stringsecond String
f i
-2
-1
666 1:6 2:6
indexof66: 0
lastindexof66: 1
对比三者的效率测试:
public class testStringBuff {
//对比三者的效率测试
@Test
public void test3(){
String text = "";
long startTime = 0L;
long endTime = 0L;
StringBuffer buffer = new StringBuffer("");
StringBuilder builder = new StringBuilder("");
System.out.println("三者同时添加20000个数花费的时间比较!!");
startTime = System.currentTimeMillis();
for(int i = 0;i<20000;i++){
buffer.append(String.valueOf(i));}
endTime = System.currentTimeMillis();
System.out.println("StringBuffer的执行时间:"+(endTime-startTime));
startTime = System.currentTimeMillis();
for(int i = 0;i<20000;i++){
builder.append(String.valueOf(i));}
endTime = System.currentTimeMillis();
System.out.println("StringBuilder的执行时间:"+(endTime-startTime));
startTime = System.currentTimeMillis();
for(int i = 0;i<20000;i++){
text = text + i;}
endTime = System.currentTimeMillis();
System.out.println("String的执行时间:"+(endTime-startTime)); }
}

测试结果:

三者同时添加20000个数花费的时间比较!!
StringBuffer的执行时间:10
StringBuilder的执行时间:3
String的执行时间:967