1.实例化
1.直接赋值
String str = "haha" ;
2.传统赋值
String str = new String("haha") ;
2.字符串的比较
public class CompExer {
public static boolean fun1(String str1,String str2){
if(str1 == str2){
return true;
}
return false;
}
public static boolean fun2(String str1,String str2){
if(str1.equals(str2)){
return true;
}
return false;
}
public static void main(String[] args) {
String string1 = "haha";
String string2 = new String("haha");
System.out.println("等号比较:"+fun1(string1,string2));
System.out.println("equals比较:"+fun2(string1,string2));
}
}
结果:
String类中“==”与“equals”的区别:
- “==”比较的是字符串的地址
- “equals比较的是字符串的内容”
3.String的匿名对象
使用 “” 定义的内容本质上就是String的匿名对象
String string = “haha”;
这条语句的本质就是将一个String的匿名对象设置一个名字,而此匿名对象保存在堆中
4.两种实例化的区别
直接赋值:
没有开辟新的内存空间,且对象保存在对象池中以便下次使用
传统赋值:
使用此方法会开辟两块内存空间,其中一块会成为垃圾空间,且不会自动保存到对象池中,需要使用intern()方法手动入池
字符串不可变更
字符串一旦定义就不可变更
String str = "hello ";
str += “world”;
System.out.println(str); //hello world
以上变更的是字符串对象而非字符串常量,同时还会产生大量垃圾空间
由此引出StringBuffer和StringBuilder
StringBuffer和StringBuilder
操作字符串的两个类
Synchronized ——> StringBuffer
无 ——> StringBuilder
-
StringBuffer多线程情况下使用
Synchronized:线程安全关键字
StringBuilder,String:但线程情况下使用,多线程使用不安全 -
StringBuffer和StringBuilder在拼接的时候不会产生垃圾空间
String在拼接时会产生新的空间 -
String在拼接时在底层被优化成StringBuilder ——> 调用append ——> 结果调用StringBuilder的toString()方法
String str = "hello ";
str += “world”;
System.out.println(str); //hello world
使用若在循环中使用拼接,优先使用StringBuilder
6.字符与字符串
package exer.bit.string;
import java.util.Arrays;
public class StringCom {
public static void main(String[] args) {
String str = "HelloWorld";
char []data = str.toCharArray();
System.out.println(Arrays.toString(data));
}
}
String str = "HelloWorld";
char str2 = str.charAt(5);
System.out.println(str2);
7.字节与字符串
package exer.bit.string;
import java.util.Arrays;
public class StringCom {
public static void main(String[] args) {
String str = "HelloWorld";
byte[] data = str.getBytes();
System.out.println(Arrays.toString(data));
}
}
8.字符串比较
package exer.bit.string;
import java.util.Arrays;
public class StringCom {
public static void main(String[] args) {
String str1 = "Hello";
String str2 = "hello";
System.out.println(str1.equals(str2)); //false
System.out.println(str1.equalsIgnoreCase(str2)); //true
}
}
String string1 = "A";
String string2 = "a";
String string3 = "helloA";
String string4 = "helloB";
System.out.println(string1.compareTo(string2));//-32
System.out.println(string2.compareTo(string1));//32
System.out.println(string3.compareTo(string4));//-1
System.out.println(string1.compareTo("A"));//0
1.相等:返回0
2.小于:返回负数
3.大于:返回正数
9.字符串查找
package exer.bit.string;
import java.util.Arrays;
public class StringCom {
public static void main(String[] args) {
String string = "Hello World!";
System.out.println(string.contains("World"));//true
System.out.println(string.indexOf("W"));//6
System.out.println(string.indexOf("W",2));//6
System.out.println(string.endsWith("e"));//false
System.out.println(string.lastIndexOf("h"));//-1
System.out.println(string.lastIndexOf("h",2));//-1
}
}
10.字符串替换
package exer.bit.string;
import java.util.Arrays;
public class StringCom {
public static void main(String[] args) {
String string = "Hello World!";
System.out.println(string.replaceAll("l","^"));//He^^o Wor^d!
System.out.println(string.replaceFirst("l","^"));//He^lo World!
}
}
11.字符串拆分
package exer.bit.string;
import java.util.Arrays;
public class StringCom {
public static void main(String[] args) {
String string = "Hello World! Hello Java!";
System.out.println(Arrays.toString(string.split(" ")));
System.out.println(Arrays.toString(string.split("! ",2)));
String string1 = "255.255.255.0";
System.out.println(Arrays.toString(string1.split("\\.")));
//有些内容无法拆分时需要使用“\”转义,例如* ^ | . \……
}
}
12.字符串截取
package exer.bit.string;
import java.util.Arrays;
public class StringCom {
public static void main(String[] args) {
String string = "Hello World!";
System.out.println(string.substring(6));//World
System.out.println(string.substring(6,8));//左闭右开 Wo
}
}