一个小例子:
public
class
StringDemo{
private
static
final
String MESSAGE=
"taobao"
;
public
static
void
main(String [] args) {
String a =
"tao"
+
"bao"
;
String b=
"tao"
;
String c=
"bao"
;
System.out.println(a==MESSAGE); // true
System.out.println((b+c)==MESSAGE); // false
}
}
a这种形式的String是存在栈中的,new出来的String是存在堆里面的,==判断的是引用地址是否相同,而equals方法,判断的是String的内容是否相同,区分开这个就明白了。
还有就是一种情况,在编译期确定变量的值,跟在运行期确定变量的值的区别,就参见下面这个大神的博客吧,很详细。
http://my.oschina.net/u/551903/blog/134000