- String及其常用API
1.1String是不可变对象。
java.lang.String使用了final修饰,不能被继承。
字符串底层封装了字符数组及针对字符数组的算法。
字符串一旦创建,对象就无法改变,但是字符串引用可以重新赋值。
String不适合用于频繁的修改:
1.2 String常量池。
Java为了提高性能,静态字符串在常量池中创建,并且尽量使用同一个对象,重用静态字符串。
对于重复出现的字符串直接量,JVM首先会在常量池中查找,如果有会直接调用,返回该对象。
public class testConstantpool{
public static void main(String[] args) {
//该Hello常量对象会放入常量池中
String string1="Hello";
//不会创建新的对象,而是使用常量池中的对象
String string2="Hello";
System.out.println(string1==string2); //输出true
}
}
public class testConstantpool{
public static void main(String[] args) {
String string1="123Hello";
String string2="123Hello";
String string3="123"+"Hello";
String string4=new String("123Hello");
String string5=new String("123Hello");
System.out.println(string1==string2); //输出true
/**
* 在Java中,编译器首先会对都是字面量的表达式进行计算,String3中会将字符串"123"和"Hello"进行运算得到"123Hello"
* 然后运行程序,将String3与String1进行比较,因为都是指向"123Hello"这个对象,所以他们的地址一样,得到结果为true.
*/
System.out.println(string1==string3); //输出true
/**
* 使用new创建了新的对象,不在去常量池中寻找,所以这两个不是同一个对象,输出为false
*/
System.out.println(string1==string4); //输出false
/**
* 每次使用new都会创建一个新的对象
*/
System.out.println(string4==string5); //输出false
}
}
1.3 String的构造方法。
(1)String( ):创建一个内容为空的字符串”“。
(2)String(String value):字符串参数value为字符串指定的内容。
(3)String(char[] value):字符数组参数value为字符串指定的内容。
(4)String(byte[] bytes):
1.4 String类常用方法。
(1)length( ):返回字符串的字符个数。
(2)char charAt(in index):返回字符串中index位置上的字符。
(3)getChar(int srcBegin,int srcEnd,char dst[],int dstbegin):从当前字符串中复制若干字符到指定字符数组dst[]中.
String s="0123456";
char[] chars=new char[3];s.getChars(1,4,chars,0); //数组chars的内容是{1,2,3}
(4)equals(object str)和equalsIgonreCase(object str):判断两个字符串是否相同。前者区分大小写,后者不区分大小写。
(5)int compareTo(String str):按字典顺序比较字符串大小。如源字符串较小返回小于0的值,相等返回0,较大返回大于0的值。
system.out.println("a"compareTo("b"); //返回-1
system.out.println("a"compareTo("a"); //返回0
system.out.println("c"compareTo("b"); //返回1
(6)indexOf( )和lastIndexOf( ):在字符串检索特定字符或子字符串,前者从字符串首位置开始查找,后者从末尾开始。未查找到返回-1。
(7)concat(String str):把字符串str附加在当前字符串的末尾。
String str="Hello";
String newStr=str.concat(" World");
system.out.println(newStr); //打印 Hello World
(8)substring( ):返回字符串的一个子字符串,有两种重载形式。
public String substring(int beginIndex); //参数为开始位置,结束位置为字符串长度-1。
public String substring(int beginIndex,int endIndex); //参数为开始位置,结束位置为endIndex-1。
(9)String[ ] split(String regex):根据参数把字符串分割成几个子字符串。
String str="11:22:33";
str.split(":"); //输出11 22 33
(10)replaceAll(String regex,String replacement)和replaceFirst(String regex,String replacement):参数replacement替换参数regex,前一个方法是替换所有的,后一个方法是只替换第一个。
String str="12:23:34";
String newStr=str.replaceAll(":","-"); //输出12—23-34
String newStr1=str.replaceFirst(":","-"); //输出12-23:34
(11)trim( ):把字符串首位的空格删除。
String str=“ 12 34 ”;
system.out.println(str.trim()); //输出"12 34"
(12)String valueOf( ):把基本类型转换为String类型。
System.out.println(String.valueOf(-129)); //输出-129
(13)toUpperCase( )和toLowerCase( ):前者是把字符串所有字符改成大写,后者是把所有字符改成小写。
- StringBuffer及其API
2.1 StringBuffer是字符串变量。
是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上操作的,这样就不会像String一样创建一些而外的对象进行操作了。
2.2 StringBuffer的构造方法。
(1)StringBuffer( ):建立一个空缓冲区,初始字符容量为16。
(2)StringBuffer(int length):建立一个初始容量为length的空缓冲区。
(3)StringBuffer(String str):缓冲区初始内容为str,并且另外提供16个字符的初始容量。
2.3 StringBuffer常用方法。
(1)length( ):返回字符串长度。
(2)append( ):向缓冲区添加新的字符串。
StringBuffer sb=new StringBuffer();
sb.append("Hello");
sb.append("World");
System.out.println(sb); //打印"HelloWorld"
(3)toString( ):返回缓冲区的字符串。
(4)charAt(int index)和setCharAt(int index.char ch):前者是返回字符串中index位置上的字符,后者是在index位置添加字符串ch。
(5)getChar(int srcBegin,int srcEnd,char dst[],int dstbegin):从当前字符串中复制若干字符到指定字符数组dst[]中.、
(6)substring( ):返回字符串的一个子字符串,有两种重载形式。与String一样。
(7)insert(int offset,String str):在字符串offset位置插入字符串str。
3.比较String和StringBuffer。
(1)两个类都覆盖了Object类的toString方法,但是各自实现方式不同。String是返回当前实例本身的引用,StringBuffer是返回一个以当前StringBuffer的缓冲区的所有字符为内容的新的String对象的引用。
String s="abc";
StringBuffer sb=new StringBuffer("abc");
system.out.println(s==s.toString()); //打印true
system.out.println(sb==sb.toString()); //打印false
(2)String对象可以用“+”进行连接,而StringBuffer类对象不可以。
4.StringBuffer类和StringBulider类差不多,都是字符串可变量。但是前者是线程安全的,同步处理,性能稍慢 ,后者是非线程安全的,并步处理,性能稍快。
学习API的主要是记住有哪些方法具有什么样的功能,目前不必记住方法的参数什么的。