首先,对于String类有一点是毫无疑问的:对String对象的任何改变都不影响到原对象,相关的任何change操作都会生成新的对象。
一. String与StringBuilder、StringBuffer
1.1 三者之间的比较
1.1.1 添加字符串
string1 += string2;
String类后面添加字符串,在以上例子中,相当于将原有的string1变量指向的对象内容取出与string2变量指向的对象作相加操作再存进另一个新的String对象当中,再让string1变量指向新生成的对象。(其中string2也可以是一个字符串)。
StringBuilder str = new StringBuilder(string1); StringBuffer str = new StringBuffer(string1);
StringBuilder与StringBuffer类后面添加字符串,在以上例子中,并没有创建新的对象,append操作是在原有对象的基础上进行的,如果添加动作要执行多次的话,StringBuilder与StringBuffer在全部过程中只创建了一个对象,所占的资源要比String方式小得多。
1.1.2 性能及使用场景
String、StringBuilder、StringBuffer三者的执行效率: StringBuilder > StringBuffer > String
当然这个是相对的,不一定在所有情况下都是这样。比如String str = "hello"+ "world"的效率就比 StringBuilder st = new StringBuilder().append("hello").append("world")要高。(String类的str在编译期间被JVM优化成了"helloworld")。
因此,这三个类是各有利弊,应当根据不同的情况来进行选择使用:
- 当字符串相加操作或者改动较少的情况下,建议使用 String str="hello"这种形式;
- 当字符串相加操作较多的情况下,建议使用StringBuilder;
- 如果采用了多线程,则使用StringBuffer。
1.2 String与StringBuilder、StringBuffer之间的转换
1.2.1 String转换成StringBuilder与StringBuffer
有两种方法:
1 //法一 2 StringBuilder stringbuilder = New StringBuilder("abcd"); 3 StringBuilder stringbuilder = New StringBuilder(str1); 4 5 StringBuffer stringbuffer = New StringBuffer("efgh"); 6 StringBuffer stringbuffer = New StringBuffer(str2); 7 //法二 8 StringBuilder stringbuilder = New StringBuilder(); 9 stringbuilder.append(str1); 10 11 StringBuffer stringbuffer = New StringBuffer(); 12 stringbuffer.append(str2)
1.2.2 StringBuilder与StringBuffer转换成String
String str1 = stringbuffer.toString(); String str2 = stringbuilder.toString();
二. String与int
2.1 将字串String转换成整数int
有两个方法:
1 //法一 2 int i = Integer.parseInt([String]); 3 int i = Integer.parseInt([String],[int radix]); 4 //法二 5 int i = Integer.valueOf(my_str).intValue();
2.2 将整数int转换成字串String
有三种方法:
1 //法一 2 String s = String.valueOf(i); 3 //法二 4 String s = Integer.toString(i); 5 //法三 6 String s = "" + i;
三. String与字符数组(char[])
3.1 String转换成字符数组(char[])
有两种方法:
1 //法一 2 char[] strChar = str.toCharArray(); 3 //法二 4 int[] strChar = new int[str.length()]; 5 for(int i = 0;i < str.length(); i++){ 6 strChar[i] = (int)str.charAt(i); 7 }
3.2 字符数组(char[])转换成String
有两种方法:
1 char data[] = {‘h‘, ‘e‘, ‘l‘, ‘l‘, ‘o‘}; 2 //法一 3 String str1 = new String(data); 4 //法二 5 String str2 = String.valueOf(data);
四. String与byte[]
4.1 string转换成byte[]
1 byte[] midbytes=isoString.getBytes("UTF8"); 2 //为UTF8编码 3 byte[] isoret = srt2.getBytes("ISO-8859-1"); 4 //为ISO-8859-1编码,其中ISO-8859-1为单字节的编码
4.2 byte[]转换成String
1 String isoString = new String(bytes,"ISO-8859-1"); 2 String srt2=new String(midbytes,"UTF-8");
五. String与Date
详见:http://www.cnblogs.com/bmbm/archive/2011/12/06/2342264.html
参考:http://www.cnblogs.com/dolphin0520/p/3778589.html
http://zhangyuefeng1983.blog.163.com/blog/static/1083372520126693524870/
http://www.cnblogs.com/bmbm/archive/2011/12/06/2342264.html