private static final String message="taobao";
String a="tao"+"bao";
String b="tao";
String c="bao";
a==message : return true
(b+c)==message : return false
Java中的变量和基本类型的值存放在栈内存,比如int x=1; int y=1; 变量x,y,1都存在栈中,x指向1,y指向1。==用于判断两个变量指向的地址是否一致,所以x==y返回值为true。
同理String s="Hello",变量s存放在栈中,字符串"Hello"存放在栈中的字符串常量区。
但是String s= new String("Hello"),这是创建了一个对象,变量s在栈内存中,而"Hello"这个String对象在堆内存内,如果再写一个,它仍然是创建一个新的对象,即使String类型的对象内容相同,它们也不是同一个对象,所以进行比较只能用equal方法。
这里(b+c)是存放在堆内存中的String对象。Java对String的相加是通过StringBuffer实现的,先构造一个StringBuffer里面存"tao",然后调用append()方法追加"bao",然后将值为"taobao"的 StringBuffer转化成String对象。StringBuffer对象在堆内存中,转换成的String对象也在堆内存中。