邓杰 发表于 2012-6-21 12:32
你是怎么验证的;分享下;
package com.heima.test;
public class StringTest {
/**
* @param args
*/
public static void main(String[] args) {
String a="a";
String b="b";
String c="ab";
String ab=a+b;//请注意这里
System.out.println(c==ab);//得到的是false
//但是请看下面的:
String str1="ab";
String str2="a"+"b";
System.out.println(str1==str2);//得到的却是true,为什么,因为str1,和str2都是引用的字符串常量
//再看下面的
str2=str1+"c";//注意str1的值为 “ab"
System.out.println(str2=="abc");//现在又是false,说明了只要虽然str1是指向字符串常量,但是现在str1已经是一个对象了,他参与运算的之后已经不是一个字符串常量而是到了堆内存,要不怎么会不相等呢
//看下面
str2="ab"+"c";
System.out.println(str2=="abc");//现在又是true,说明了只要是字符串常量相加,得到的就是字符串常量
}
}
|