//创建一个字符串对象hi,名为s1
String s1 = "hi";
//创建一个空字符串对象,名为s2
String s2 = new String();
//创建一个字符串对象hi,名为s3
String s3 = new String("hi");
复制代码
002.String常用方法
equals() 比较内容是否相同
length() 获取长度
charAt(int index) 获取指定字符
subString() 截取
getBytes() 字符串转byte数组
toCharArray() 字符串转char数组
indexOf() 字串第一次出现的下标索引
lastIndexOf() 子串最后一次出现的下标索引
replace(old,new) 替换
trim() 前后除空格
toLowerCase() 转小写
toUpperCase() 转大写
复制代码
003.字符串与byte数组间相互转换
//字符串转byte数组
String str = "Java 学习";
byte[] arr = str.getBytes();
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
System.out.println();
//byte数组转字符串
String str1= new String(arr);
System.out.println(str1);
复制代码
004.==和equals方法区别
String str1="java";
String str2="java";
String str3 = new String("java");
System.out.println("str1和str2的内容相同?"+str1.equals(str2)); //true
System.out.println("str1和str3的内容相同?"+str1.equals(str3)); //true
System.out.println("str1和str2的地址相同?"+(str1==str2)); //true
System.out.println("str1和str3的地址相同?"+(str1==str3)); //false
复制代码
005.字符串的不可变性
String str1 = "java";
str1 = "hello "+str1;
//str1不再指向"java"所在的内存空间,而是指向了"hello java"
System.out.println(str1); //hello java
复制代码
006.String和StringBuffer、StringBuilder区别
- 可变性(本质区别)
- 不可变字符串 String (内容改变,对象也会改变)
- 可变字符串StringBuffer和 StringBuilder(内容改变,对象不会改变)
- 线程安全
- String是线程安全
- StringBuffer是线程安全,内部使用了synchronized修饰
- StringBuilder不是线程安全
007.StringBuilder和StringBuffer
0071.常用方法
//以StringBuilder举例
//append() 追加内容到末尾
StringBuilder str = new StringBuilder("你好");
str.append(",java");
str.append(",").append("一起学习");
System.out.println(str); //你好,java,一起学习
//length() 长度
System.out.println(str.length()); //12
//delete() 删除
System.out.println(str.delete(7,12)); //你好,java
//replace() 替换
System.out.println(str.replace(7, 12, ",好好好")); //你好,java,好好好
//substring() 截取
System.out.println(str.substring(9,11)); //好好
//insert() 将内容插入到指定位置
System.out.println(str.insert(5, "第五位置")); //你好,ja第五位置va,好好好
//reverse() 反转
System.out.println(str.reverse()); //好好好,av置位五第aj,好你
复制代码
0072.StringBuilder和StringBuffer区别
- 线程安全(本质区别):
- StringBuffer是线程安全(方法有synchronized修饰),效率低;
- StringBuilder是线程不安全,效率高;
- 执行速度
- StringBuilder>StringBuffer
008.一些题
String a="a";
String b="b";
String c = a+b; //在堆上创建的新的对象
String d = new String("ab");
String e = "a"+"b"; //常量池中的对象
String h = "ab";
System.out.println(e==h); //true
System.out.println((a+b).equals(c)); //true
System.out.println(e==c); //false
System.out.println(c==d); //false
System.out.println(c.equals(d)); //true
复制代码
009.总结
- 操作少量的数据,适用String;
- 单线程操作字符串缓冲区下操作大量数据,适用StringBuilder;
- 多线程操作字符串缓冲区下操作大量数据,适用StringBuffer;
原文
https://juejin.im/post/5dda93e651882572fe6edf55