【Java学习笔记】Day 3 String及StringBuilder及StringBuffer 【待整理】

从网上搜了一些内容,觉得说的不是那么容易理解,有的说的也不大正确,所以,在这里整理一下。

因为现在一直用.Net C#么,所以也同样的对比一下。

Java手生,写的代码不好,不要笑话。

View Code
 1 import java.util.Calendar;

 2 

 3 public class TestString {

 4 

 5     public static void main(String[] agrs) {

 6         stringTest();

 7         stringBufferTest();

 8         stringBuilderTest();

 9     }

10 

11     private static void stringTest() {

12         Calendar Cld = Calendar.getInstance();

13         System.out.print(Cld.get(Calendar.MINUTE));

14         System.out.print("分" + Cld.get(Calendar.SECOND));

15         System.out.println("秒" + Cld.get(Calendar.MILLISECOND));

16         String a = "";

17         for (int i = 0; i < 50000; i++) {

18             a += "Hello";

19         }

20         Cld = Calendar.getInstance();

21         System.out.print(Cld.get(Calendar.MINUTE));

22         System.out.print("分" + Cld.get(Calendar.SECOND));

23         System.out.println("秒" + Cld.get(Calendar.MILLISECOND));

24         System.out.println("String测试结束");

25 

26     }

27 

28     private static void stringBufferTest() {

29         Calendar Cld = Calendar.getInstance();

30         System.out.print(Cld.get(Calendar.MINUTE));

31         System.out.print("分" + Cld.get(Calendar.SECOND));

32         System.out.println("秒" + Cld.get(Calendar.MILLISECOND));

33         StringBuffer a = new StringBuffer();

34         for (int i = 0; i < 50000; i++) {

35             a.append("Hello");

36         }

37         Cld = Calendar.getInstance();

38         System.out.print(Cld.get(Calendar.MINUTE));

39         System.out.print("分" + Cld.get(Calendar.SECOND));

40         System.out.println("秒" + Cld.get(Calendar.MILLISECOND));

41         System.out.println("StringBuffer测试结束");

42     }

43 

44     private static void stringBuilderTest() {

45         Calendar Cld = Calendar.getInstance();

46         System.out.print(Cld.get(Calendar.MINUTE));

47         System.out.print("分" + Cld.get(Calendar.SECOND));

48         System.out.println("秒" + Cld.get(Calendar.MILLISECOND));

49         StringBuilder a = new StringBuilder();

50         for (int i = 0; i < 50000; i++) {

51             a.append("Hello");

52         }

53         Cld = Calendar.getInstance();

54         System.out.print(Cld.get(Calendar.MINUTE));

55         System.out.print("分" + Cld.get(Calendar.SECOND));

56         System.out.println("秒" + Cld.get(Calendar.MILLISECOND));

57         System.out.println("StringBuilder测试结束");

58     }

59 

60 }

结果如下图所示

View Code
52分23秒886

52分31秒839

String测试结束

52分31秒839

52分31秒839

StringBuffer测试结束

52分31秒839

52分31秒855

StringBuilder测试结束

当然有人可能会质疑顺序问题,在修改了顺序之后发现。

View Code
54分11秒120

54分11秒120

StringBuffer测试结束

54分11秒120

54分11秒136

StringBuilder测试结束

54分11秒136

54分19秒261

String测试结束

所以从,效率上来看,StringBuffer要强于StringBuilder要强于String的。

顺便对比一下C#。

View Code
 1 class Program

 2     {

 3         static void Main(string[] args)

 4         {

 5             stringBuilderTest();

 6             stringTest();

 7         }

 8 

 9         private static void stringTest()

10         {

11             DateTime t = DateTime.Now;

12             string mTime = t.Minute + "" + t.Second + "" + t.Millisecond;

13 

14             Console.WriteLine(mTime);

15             string a = "";

16             for (int i = 0; i < 50000; i++)

17             {

18                 a += "Hello";

19             }

20             t = DateTime.Now;

21             mTime = t.Minute + "" + t.Second + "" + t.Millisecond;

22 

23             Console.WriteLine(mTime);

24             Console.ReadKey();

25         }

26 

27         private static void stringBuilderTest()

28         {

29             DateTime t = DateTime.Now;

30             string mTime = t.Minute + "" + t.Second + "" + t.Millisecond;

31 

32             Console.WriteLine(mTime);

33             StringBuilder a = new StringBuilder();

34             for (int i = 0; i < 50000; i++)

35             {

36                 a.Append("Hello");

37             }

38             t = DateTime.Now;

39             mTime = t.Minute + "" + t.Second + "" + t.Millisecond;

40 

41             Console.WriteLine(mTime);

42         }

43     }

运行结果如下

7分28秒323
7分28秒339
7分28秒339
7分49秒480

同样的,StringBuilder要强于String。C#中没有StringBuffer。

 

所以在进行字符串操作的时候,如果是操作频繁的地方,特别是在循环中,还是更多的推荐用StringBuilder或者StringBuffer的。

相如持久化拼接SQL的时候,当然了,更多的推荐是,如果SQL特别长,还是放入到存储过程中比较合适。

你可能感兴趣的:(StringBuilder)