public static void main(String[] args) {
String str0 = new String("HelloWord"); // 堆区
String str1 = "HelloWord"; // 常量区
String str2 = "HelloWord";
String str3 = new String("HelloWord");
String str4 = "Hello";
String str5 = "World";
String str6 = str4 + str5;
String str7 = str4 + "World";
System.out.println("------ == ------");
System.out.println(str0 == str1); // false
System.out.println(str1 == str2); // true
System.out.println(str1 == str3); // false
System.out.println(str1 == str6); // false
System.out.println(str1 == str7); // false
System.out.println(str6 == str7); // false
System.out.println("------ equal ------");
System.out.println(str1.equals(str2)); // true
System.out.println(str1.equals(str3)); // true
System.out.println(str1.equals(str6)); // false
System.out.println(str1.equals(str7)); // false
System.out.println(str6.equals(str7)); // true
System.out.println("------ hashcode ------");
System.out.println(str0.hashCode()); // 在堆量里边,str0,str1,str2,str3的hashcode相等
System.out.println(str1.hashCode()); // 在常量里边,str1,str2,str3的hashcode相等
System.out.println(str2.hashCode()); // 在常量里边,但str1 == str2为false,str1.equal(str2)为true;
System.out.println(str3.hashCode()); // 在堆里边,但str1 == str3为false,str1.equal(str3)为true;
System.out.println(str6.hashCode()); // 在常量里边,str6和str7hashcode相等
System.out.println(str7.hashCode()); // 在常量里边,但str6 == str7为false,str6.equal(str7)为true;
}