public class StringDemo {
@Test
/*
* String 定义
* 1.直接赋值
* 2.构造器赋值
* */
public void method_01(){
String str = "abc";// 直接赋值
String str2 = new String("");// ""
String str3 = new String("abc");// "abc"
char[] c = {'a','b','c'};
String str4 = new String(c);// "abc"
}
@Test
/*
* 内存
* == 比较地址
* equals()比较内容(默认Object中equals比较的是地址 String重写了equals变成了比较内容)
* 两个字面量拼接会在编译器自动完成(如果有变量则会开辟额外控件创建新的对象)
* 字面量赋值内容放到常量池(相同的不再创建)
* new对象赋值内容放到堆
* +号进行字符串的拼接会造成大量空间的浪费,不推荐大量字符串拼接(建议不要超过3个 推荐使用StringBuffer或者StringBuilder
* */
public void method_02(){
String str = "abc";//
String str2 = new String("abc");
System.out.println(str == str2);//false
System.out.println(str.equals(str2));//true
// 考核
// 两个字面量拼接会在编译器自动完成
String str3 = "hello"+"abc";// "helloabc"
String str4 = "helloabc";
System.out.println(str3 == str4);//true
String str31 = "hello";
String str41 = str31 +"abc";
System.out.println(str4 == str41);//false
// new对象的方式 互相独立
String str51 = new String("abc");
String str511 = new String("abc");
System.out.println(str51 == str511);//false
}
}
总结
== 比较地址
equals()比较内容(默认Object中equals比较的是地址 String重写了equals变成了比较内容)
两个字面量拼接会在编译器自动完成(如果有变量则会开辟额外控件创建新的对象)
字面量赋值内容放到常量池(相同的不再创建)
new对象赋值内容放到堆
+号进行字符串的拼接会造成大量空间的浪费,不推荐大量字符串拼接(建议不要超过3个 推荐使用StringBuffer或者StringBuilder)