String s = " " 和String s = new String(" ")的区别
用简单的方式理解String s = " " 和String s = new String(" ")的区别。
String a = "aaa";
String b = new String("aaa");
System.out.println(a==b);
false
通过“==”的比较不是指数值的比较而是对地址的比较,因为 String b = new String(“aaa”); 会在堆中创建一个新的对象,所以 b 指向的其实是堆中的对象,而不是堆中的常量池。
String a = "aaa";
String b = "aaa";
System.out.println(a==b);
true
在这里 a 和 b 都指向的是堆中的常量池中的同一个值,所以地址一样。
String a = "aaa";
String b = new String("aaa");
System.out.println(a.equals(b));
true
使用equals比较的是值,所以是相等的。
**
再来一个例子
String a = "aaa";
String b = new String("aaa");
b = b.intern();
System.out.println(a==b);
true
intern()的作用是把aaa的地址发回给b。