A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© a953558401 中级黑马   /  2016-9-11 17:59  /  899 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

首先,对于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[]与List

5.1 String[]转换成List

有以下三种方法,其实String[]可以是任意类型的数组。

复制代码
1 //法一
2 String[] userid = {"aa","bb","cc"};
3 List<String> userList = Arrays.asList(userid);
4 //法二
5 String[] userid = {"aa","bb","cc"};
6 List<String> userList = new ArrayList<String>();
7 Collections.addAll(userList, userid);
8 //法三 最笨的方法
9 String[] userid = {"aa","bb","cc"};
10 List<String> userList = new ArrayList<String>(userid.length);
11 for(String uid: userid){
12     userList.add(uid);
13 }
复制代码
5.2 List转换成String[]

有以下两种方法,其实String[]可以是任意类型的数组

复制代码
1 //法一
2 List<String> strList = new ArrayList<String>();
3 strList.add("aa");
4 strList.add("bb");
5 Object[] objs = strList.toArray();
6 //如果要变成String数组,需要强转类型。
7 String[] strs = (String[]) strList.toArray();
8 //也可以指定大小:
9 final int size = strList.size();
10 String[] strs = (String[])strList.toArray(new String[size]);
11
12 //法二 笨方法
13 List<String> strList = new ArrayList<String>();
14 strList.add("aa");
15 strList.add("bb");
16 String[] strs = new String[strList.size()];
17 Iterator iter = strList.iterator();
18 int i = 0;
19 while(iter.hasNext()){
20     strs[i] = (String) iter.next();
21     i++;
22 }

6 个回复

倒序浏览
很详细 点赞!
回复 使用道具 举报
大牛,分析得很详细
回复 使用道具 举报
刚学这一块,还比较晕,总结的很好,感谢
回复 使用道具 举报
666666666666666666666666点赞!
回复 使用道具 举报
楼主大牛很赞!
回复 使用道具 举报
zaoan 中级黑马 2016-9-11 22:48:39
7#
学习了 666
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马