字符串的分类:
不可变的字符串(String):当对象创建完毕之后,该对象内容(字符序列)是不可能改变的,如果内容改变就是一个新的对象。
可变的字符串(StringBuilder/StringBuffer):当对象创建完毕之后,该对象内容可以发生改变,当内容发生改变的时候,对象保持不变。
字符串本质(底层其实就是char[]),char表示一个字符,数组表示同一个类型的多个数据。
如何理解:String str = “ABC”; 等价于 char[] cs = new char[]{‘A’,’B’,’C’};
String对象的比较:
1) 单独使用””引号创建的字符串都是直接量,编译期就已经确定存储在常量池中;
2) 使用new String(“”)创建的字符串对象会存储在堆内存中,是运行期才创建;
3) 使用只包含直接量的字符串连接符,如”aa”+”bb”创建的也是直接量,编译期就已经存储在常量池中;
4) 使用包含String直接量(无final修饰符)的字符串表达式如”aa”+str1创建的对象是运行期才创建的,存储在堆中。
String类常用的API:更详细的请查看Java的API文档
1)String的创建和转换:
byte[] getbytes(); 把字符串转换为byte数组
char[] toCharArray(); 把字符串转换为char数组
String(byte[] bytes); 把byte数组转换为字符串
String(char[] value); 把char数组转换为字符串
2)获取字符串信息:
int length(); 返回此字符串长度
char charAt(int index); 返回指定索引处的char值
int indexOf(String str); 返回指定子字符串在此字符串中第一次出现处的索引
int lastIndexOf(String str); 返回指定子字符串在此字符串中最右边出现处的索引
3)字符串比较判断:
boolean equals(Object anObject); 将此字符串与指定的对象比较
boolean equalsIgnoreCase(String anotherString); 将此String与另一个String比较,不考虑大小写
boolean contentEquals(CharSequence cs); 将此字符串与指定的CharSequence比较
4)字符串大小写转换:
String toUpperCase(); 转换成大写
String toLowerCase(); 转换成小写
String类:表示不可变的字符串,当前对象创建完毕之后,该对象的内容(字符序列)是不可能改变的,一旦内容改变就是一个新的对象。
总体:做拼接字符串,统统使用StringBuilder/StringBuffer,不要使用String。
StringBuffer:StringBuffer中的方法都使用了syncharonized修饰符,表示同步的,线程安全,但是性能比较低;
不可变的字符串(String):当对象创建完毕之后,该对象内容(字符序列)是不可能改变的,如果内容改变就是一个新的对象。
可变的字符串(StringBuilder/StringBuffer):当对象创建完毕之后,该对象内容可以发生改变,当内容发生改变的时候,对象保持不变。
字符串本质(底层其实就是char[]),char表示一个字符,数组表示同一个类型的多个数据。
如何理解:String str = “ABC”; 等价于 char[] cs = new char[]{‘A’,’B’,’C’};
String对象的比较:
1) 单独使用””引号创建的字符串都是直接量,编译期就已经确定存储在常量池中;
2) 使用new String(“”)创建的字符串对象会存储在堆内存中,是运行期才创建;
3) 使用只包含直接量的字符串连接符,如”aa”+”bb”创建的也是直接量,编译期就已经存储在常量池中;
4) 使用包含String直接量(无final修饰符)的字符串表达式如”aa”+str1创建的对象是运行期才创建的,存储在堆中。
String类常用的API:更详细的请查看Java的API文档
1)String的创建和转换:
byte[] getbytes(); 把字符串转换为byte数组
char[] toCharArray(); 把字符串转换为char数组
String(byte[] bytes); 把byte数组转换为字符串
String(char[] value); 把char数组转换为字符串
2)获取字符串信息:
int length(); 返回此字符串长度
char charAt(int index); 返回指定索引处的char值
int indexOf(String str); 返回指定子字符串在此字符串中第一次出现处的索引
int lastIndexOf(String str); 返回指定子字符串在此字符串中最右边出现处的索引
3)字符串比较判断:
boolean equals(Object anObject); 将此字符串与指定的对象比较
boolean equalsIgnoreCase(String anotherString); 将此String与另一个String比较,不考虑大小写
boolean contentEquals(CharSequence cs); 将此字符串与指定的CharSequence比较
4)字符串大小写转换:
String toUpperCase(); 转换成大写
String toLowerCase(); 转换成小写
String和StringBuilder以及StringBuffer的区别:
String类:表示不可变的字符串,当前对象创建完毕之后,该对象的内容(字符序列)是不可能改变的,一旦内容改变就是一个新的对象。
总体:做拼接字符串,统统使用StringBuilder/StringBuffer,不要使用String。
StringBuilder和StringBuffer都表示可变的字符串,功能方法都是相同的
StringBuffer:StringBuffer中的方法都使用了syncharonized修饰符,表示同步的,线程安全,但是性能比较低;
StringBuilder:StringBuilder中方法都没有使用syncharonized修饰符,线程不安全,但是性能较高。
StringBuffer和StringBuilder的方法都一样的,只不过一个是线程安全,一个线程不安全。想要知道具体都有什么方法,就去查看JavaAPI文档。
一个有意思的面试题:
有两个字符串,一个字符串是“ABC”,另一个是“CBA”,现在要求写一段Java程序判断这两个字符串是不是倒叙?
调用这个方法,把两个字符串作为参数传过去,就能返回一个布尔值,来判断是否是倒叙!