string、stringbuffer、stringbuild
String
String中的内容不能被修改,也不能被继承
常见创建字符串的方法
//1
String str = "dfdf";
//2
String str2 = new String("df");
//3
char[] ch = {'a','b','c'};
String str3 = new String(ch)"
在内存中开辟对象的示意图
用Stirng str = new String(“内容”)先检查常量池,是否已有字符串的引用,如果有直接给value数组的引用;反之,将字符串放入常量池中,存进去同时把引用给value数组,在这里博主用箭头表示引用位置。
注意
String str = new String("df").inern();//可以将次字符串入池
字符串比较
- "==" 用来判断两个对象所指向的引用是否相同
- 区分大小写比较
String st = “dfdf”;
String st2 =“Dfdf”;
System.out.println(st.equals(st2)); //false
注意:
String st = “dfdf”;
String st2 = new Strin(“dfdf”).intern();
System.out.println(st.equals(st2))//true;
- **不区分大小写比较**
```java
String st = "dfdf";
String st2 ="Dfdf";
System.out.println(st.equalsIgnoreCase(st2));//true
- 比较两个字符串的大小关系
String s = "A";
String s1="a";
System.out.println(s.compareTo(s1)); //-32
String s3 = "A";
String s2="A";
System.out.println(s3.compareTo(s2));//0
String str1 = "ABC";
String str2 = "ABD";
System.out.println(str1.compareTo(str2));//-1
总结 String可以进行compareTo()是因为内部实现了Comparable接口,会根据内容进行比较 相同 0;大于返回1;小于返回-1;
根据字典序进行比较也就是说先比较第一个字母若相同进行第二个字母比较根据(unicode)编码
字符串与字符方法
-字符数组转字符串
char[] ch ={'a','b','c'};
String str = new String(ch);
String str1 = new String(ch,offest,count);//在ch数组中 从偏移位置offset开始截取count个字符,作为字符串
offset和count不能越界
- 字符串转为字符数组
String str2 = "dfdfdf";
ch[] ch = str2.toCharArray();
- 在字符串中获取指定位置的字符下标从0开始
String s = "dftntdf"
char ch = s.charAt(0);//ch='d'
字符串与字节
- 字节数组转为字符串
byte[] b = {87,99,88};
String str = new String(b);
System.out.println(str);
- 字符串转为字节数组
String str = "pqwa";
byte[] bytes = str.getBytes();
System.out.println(Arrays.toString(bytes));
byte[] 是把 String 按照一个字节一个字节的方式处理, 这种适合在网络传输, 数据存储这样的场景下使用. 更适合
针对二进制数据来操作.
char[] 是把 String 按照一个字符一个字符的方式处理, 更适合针对文本数据来操作, 尤其是包含中文的时候
字符串查找
String str3 = "abdtntdfnb";
String str4= "tntdf";
System.out.println(str3.contains(str4)); //true 是否包含子串
System.out.println(str3.indexOf(str4));//3 从头开始查找指定字符串的位置,找到返回起始位置的下标;反之返回-1
字符串分割
String df = "hello world hello df";
String[] s0 = df.split(" ");
for(String t :s0){
System.out.println(t);
}
字符"|","*","+“都得加上转义字符,前面加上”".
而如果是"",那么就得写成"\".
如果一个字符串中有多个分隔符,可以用"|"作为连字符.
StringBuffer
string有的方法StringBuffer基本有,Stringbuffer有的方法String不一定有
所有方法都是线程安全的有synchronized 关键字
适用于多线程
StringBuffer中的内容可以修改
StringBuilder
第一点同StringBuffer
没有有synchronized 关键字
String 通过+号进行字符串拼接底层被优化为 StringBuilder
StringBuilder中的内容可以修改