public static void main(String[] args) {
String a = "hello";
String b = a + "world";
String c = "helloworld";
System.out.println(b==c);
}
public static void main(String[] args) {
String a = "helloworld";
String b = "hello" + "world";
System.out.println(a==b);
}
public static void main(String[] args) {
String a = "abc";
String c = "abc";
System.out.println(a == c);
}
String str1 = new String(“abc”);
Stirng str2 = “abc”;
虽然两个语句都是返回一个String对象的引用,但是jvm对两者的处理方式是不一样的。对于第一种,jvm会马上在heap中创建一个String对象,然后将该对象的引用返回给用户。对于第二种,jvm首先会在内部维护的strings pool中通过String的 equels 方法查找是对象池中是否存放有该String对象,如果有,则返回已有的String对象给用户,而不会在heap中重新创建一个新的String对象;如果对象池中没有该String对象,jvm则在heap中创建新的String对象,将其引用返回给用户,同时将该引用添加至strings pool中。注意:使用第一种方法创建对象时,jvm是不会主动把该对象放到strings pool里面的,除非程序调用 String的intern方法
public static void main(String[] args) {
String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(s1.equals(s2));
StringBuffer stringBuffer1 = new StringBuffer("xyz");
StringBuffer stringBuffer2 = new StringBuffer("xyz");
System.out.println(stringBuffer1.equals(stringBuffer2));
}
public static void main(String[] args) {
String a = "abc";
String c = "abc";
System.out.println(a == c);
String a1 = "zxc";
String c1 = new String("zxc");
System.out.println(a1==c1);
String a2 = new String("rty");
String c2 = new String("rty");
System.out.println(a2==c2);
}