前言:string是java基础,复习巩固,测试如下:
1.String的equals()和"=="测试
public static void main(String[] args) {
//指向相同的引用
String a = "abc";
String d = "abc";
String f = new String("abc");
String g = new String(d);
String b = a;
String i = new String(b);
String c = a;
String e = d;
String h = f;
// System.out.println(b == c); // true;引用也相同
// System.out.println(b.equals(c)); // true;值相同
// System.out.println(c==e); // true;"abc"在堆中是同一个对象,引用相同
// System.out.println(h == f); // 同一个引用
// System.out.println(h.equals(f)); // 值相同
// System.out.println(h == g); // false // 引用不同
// System.out.println(h.equals(g)); //true; 值相同
// System.out.println(f==g); // false // 引用不同
// System.out.println(f.equals(g));// true;值相同
// System.out.println(i==f); // false // 引用不同
// System.out.println(i==g); // false // 引用不同
// System.out.println(i==d); // false // 引用不同
// System.out.println(i==a); // false // 引用不同
System.out.println(i.equals(f)); //true; 值相同
System.out.println(i.equals(g)); //true; 值相同
System.out.println(i.equals(d)); //true; 值相同
System.out.println(i.equals(a)); //true; 值相同
}
2.组合String
public static void main(String[] args) {
String s = new String("yveshe");//在堆中创建一个对象s,s查看常量池中是否存在"yveshe",如果有则拷贝一份放到堆中,然后返回堆中的地址;如果池中没有则在堆中创建一份,然后返回堆中的地址;然后内存中还会创建一个对象,总共三个;
String s1 = "yveshe";//这行代码被执行的时候,JAVA虚拟机首先在字符串池中查找是否已经存在了值为"yveshe"的这么一个对象,它的判断依据是String类equals(Object obj)方法的返回值。如果有,则不再创建新的对象,直接返回已存在对象的引用;如果没有,则先创建这个对象,该放在了字符串池中,再将它的引用返回。
String s2="yve";
String s3="she";
String s4=s2+s3;// s4为s2+s3的引用组合 ,s4不会在创建临时string了;
String s5 = "yve"+"she";
System.out.println(s1==s4.intern()); // true
System.out.println(s1==s4); // false
System.out.println(s1.equals(s4)); // true 值相同
System.out.println(s1==s5); // true, s5会在常量池中创建临时String,结果指向同一个string;
System.out.println(s == s5); // false
}