JAVA字符串类型概述
JAVA中的字符串类型是非常常用的数据类型,它在日常编程中使用的频次之多,会使得很多人以为它是JAVA的一种基本数据类型(不是)。
字符串相关的类型主要有三种:String,StringBuilder,StringBuffer。String是只读字符串,它的值是不可变的,这就导致每次对String的操作都会生成新的String对象,再把引用指向该对象。
正因为如此,经常对String进行操作会不断产生新的对象,这非常不利于代码的性能。此时我们可以考虑 StringBuilder 和 StringBuffer。StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。StringBuilder 是非线程安全的,把是否需要进行多线程加锁交给工程师决定,所以相较于 StringBuffer 有速度优势,一般情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。
String类型对象支持直接相加操作,这样操作比较简便。但在循环体内,字符串的连接方式应该使用 StringBuilder 的append方法进行扩展。
比如,以下的操作就是极其不推荐的:
String result = ""; for(int i = 0; i < str.length(); i++){ char c = S.charAt(i); if(c == ' '){ result += "%20"; }else{ result += c; } }
str + "new str" 的内部实现逻辑是,每次new 一个StringBuilder对象,然后进行append操作,最后通过toString方法返回String对象,不仅造成了内存资源的浪费,而且性能非常差。应该改为:
StringBuilder builder = new StringBuilder(); for(int i = 0; i < str.length(); i++){ char c = S.charAt(i); if(c == ' '){ builder.append("%20"); }else{ builder.append(c); } }
常用的类型转换
String -> Int
String num = "58"; Integer.parseInt(num); //58 // 对于二进制或其他进制字符串的解析,只需要传入第二个参数 String num1 = "101"; Integer.parseInt(num1, 2); //5
Int -> String
int num2 = 58; Integer.toString(num2); //"58" //如果想转化为二进制形式的字符串,可以使用以下方法 int num3 = 5; Integer.toBinaryString(num3); //"101"
String -> char[]
String cba = "cba"; cba.toCharArray(); //['c', 'b', 'a']
char[] -> String
char[] arr = {'c', 'b', 'a'}; String s = new String(arr);
ArrayList -> String
StringBuilder builder = new StringBuilder(); //Iterate over your list builder.append("xxx"); builder.toString();
还没有评论,来说两句吧...