java基础之String
String 方法
1char charAt (int index) 返回baiindex所指du定的字符
2String concat(String str) 将两字符串连接zhi
3boolean endsWith(String str) 测试字符串是否以str结尾
4boolean equals(Object obj) 比较两对象
5char[] getBytes 将字dao符串转换成字符数组返回
6 char[] getBytes(String str) 将指定的字符串转成制服数组返回
7boolean startsWith(String str) 测试字符串是否以str开始
8 int length() 返回字符串的长度
9 String replace(char old ,char new) 将old用new替代
10 char[] toCharArray 将字符串转换成字符数组
11 String toLowerCase() 将字符串内的字符改写成小写
12String toUpperCase() 将字符串内的字符改写成大写
13String valueOf(Boolean b) 将布尔方法b的内容用字符串表示
14String valueOf(char ch) 将字符ch的内容用字符串表示
15String valueOf(int index) 将数字index的内容用字符串表示
16 String valueOf(long l) 将长整数字l的内容用字符串表示
17String substring(int1,int2) 取出字符串内第int1位置到int2的字符串
String 不可变性
通过底层的源码我们可以看到Strng是final关键字修饰的类这就说明他是不能被继承的,值是不可变的char数组实现的,并且是private修饰的外界访问不到变量,所以他天然就具有并发共享安全的优势
String str = new String("abc");
str = "cde";
String常量的不可变指的是存放String对象那个区域里的内容不能变。比如,上面的代码。堆里面会有存放abc的区域,而这个区域的abc是不能变的,也就是不能变为abd等。而引用是可变的,只要不改变常量里面的内容就行。
存放位置
也就是由于字符串的不可变性,所以才有了我们的现在的常量池,jdk1.7之前常量池是放在方法区,1.7之后的常量池是在堆中,那么什么样的字符串是放在常量池中的呢
String s="3333";
String s1="3333";
这种直接赋值的串会被放在常量池中
String s2=new String("3333");
String s3=new String("3333");
这种new出来的会被放在堆中
所以
s==s1;//true
s2==s3;//false
StringBuilder
由于String的不可变性每拼接一个字符串都会产生一个新的字符串,如果频繁大量的进行字符串拼接,资源会造成浪费效率也会变低。为了解决字符串频繁拼接,jdk1.5 推出了StringBuilder对象,StringBuilder对象底层使用数组实现,每次拼接并不会产生新的字符串而是对数组进行追加。
StringBuffer
Jdk.1.0 StringBuffer对象,虽然StringBuilder的效率很高但是他是线程不安全的,如果有并发场景请使用StringBuffer。