一个小例子:
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
本文通过一个简单的Java示例解释了字符串常量池的概念,以及如何使用==运算符与equals方法来比较字符串。同时区分了编译期与运行期确定字符串值的区别。
8万+

被折叠的 条评论
为什么被折叠?



