java常用类之String类
1 String类概述
- 字符串常量是常量,创建之后不可改变
- 字符串字面值存储在字符串池中,可以共享
敲重点了:
看一下代码:
- Sring在创建后,在常量池中创建了一个 hello 的常量,在栈中的name引用指向了 hello 常量
- -当给name赋值为 zhangsan 时,又在常量池中创建了 zhangsan 的常量,name 指向它,那 hello 任然存在,但是运行后会被垃圾回收给回收
- 在创建一个 name2 这时会在常量池中找有没有 zhangsan 这个常量,有,则 name2 指向它,没有就 创建;此我们知道 存在有一个 zhangsan 的常量,所以 name 和 name2 存的地址是相同的,所以打印后是true
- 因为 字符串变量存储的是地址,所以 == 判断的也是地址,因此判断两个字符串是否相等时,不用 等于号,而是用equals()方法
- 用new 关键字创建String对象,是在堆和常量池中都创建了 对象,下面中的 s1 和 s2 是在堆中的两个不同对象,所以地址是不同的,因此为false.
public class Test01 {
public static void main(String[] args) {
String name="hello";
name="zhangsan";
String name2="zhangsan";
System.out.println(name==name2);//true
String s1=new String("java");
String s2=new String("java");
System.out.println(s1==s2);//false
}
}
字符串的常用方法
1. length():返回字符串的长度
2. chatAt(int index):返回某个位置的字符
3.contains(String str):是否包含某个字符串
4.toCharArray():将字符串转成数组
5. intdexof(String str):查找str首次出现的下标,存在则返回下标,不存在则返回-1
6.lastIndexof(String str):查找字符串在当前字符串中最后一次出现的索引下标。
7 .trim()去掉字符串前后的空格
8.toUpCase():将小写转成大写
8.endWith(str):判断是否以str结尾
9.starWith(str):判断是否以str开头
10.replace(char oldChar,char newChar):将新字符串替换成旧的字符串
11.split(String str):对字符串进行拆分
12.equals():比较两个字符串是否相等
13.compare():比较大小,此大小为在字典里的顺序,用法:s3.compare(s4) 即用s3的位置减s4的位置
可变长字符串
String类虽然给我们提供了很多很好用的方法,但是,由于String 的不可变性,导致在运行的过程中会出现大量的无用的字符串。此外,每次在操作的时候都会产生一个新的字符串,效率也低。
因此,sun公司又开发出了新的类:
StringBuffer:可变长字符串,JDK1.0提供,运行效率慢,线程安全。
StringBuilder:可变长字符串,JDK5.0提供,运行效率快,线程不安全。
下面介绍他们的主要方法,StringBuffer和StringBuilder的方法一样。
代码:
package hai;
public class Testo2 {
/**
*StringBuffer和StringBuilderd的使用
* 和String的区别;1)效率比String高; 2)比String更节省内存。
*
*/
public static void main(String[] args) {
/*1.append 追加
* */
/*StringBuffer strb=new StringBuffer();*/
StringBuilder strb=new StringBuilder();
strb.append("java,世界第一");
System.out.println(strb.toString());
strb.append("java真想");
System.out.println(strb.toString());
strb.append("java不错");
System.out.println(strb.toString());
/*
* 2.insert 添加
* */
strb.insert(0,"我在最其前面");
System.out.println(strb.toString());
/*
* 3.replace 可以指定位置替换
* */
strb.replace(0,4,"hello");
System.out.println(strb.toString());
/*
* 4.删除
* */
strb.delete(0,5);
System.out.println(strb.toString());
//清空
strb.delete(0,strb.length());
System.out.println(strb.length() );
}
}