看过那个帖子,很有收获。原帖地址是URL
public class TestString {
public static void main (String args[]){
String str1 = new String ("abc");
String str = "abc";
if (str == str1){
System.out.println("true");
}
else{
System.out.println("false");
}
}
}
上面的代码输出自然是false。但是关于下面这段代码我有一点不明白
public class StringInternTest {
public static void main(String[] args) {
// 使用char数组来初始化a,避免在a被创建之前字符串池中已经存在了值为"abcd"的对象
String a = new String(new char[] { 'a', 'b', 'c', 'd' });
String b = a.intern();
if (b == a) {
System.out.println("b被加入了字符串池中,没有新建对象");
} else {
System.out.println("b没被加入字符串池中,新建了对象");
}
}
} 运行结果: b没被加入字符串池中,新建了对象 通过数组参数创建的那个String对象a,也就是abcd是存在了字符池了吗?还是存在了别的地方
public class TestString {
public static void main (String args[]){
String str1 = new String ("abc");
String str = "abc";
if (str == str1){
System.out.println("true");
}
else{
System.out.println("false");
}
}
}
上面的代码输出自然是false。但是关于下面这段代码我有一点不明白
public class StringInternTest {
public static void main(String[] args) {
// 使用char数组来初始化a,避免在a被创建之前字符串池中已经存在了值为"abcd"的对象
String a = new String(new char[] { 'a', 'b', 'c', 'd' });
String b = a.intern();
if (b == a) {
System.out.println("b被加入了字符串池中,没有新建对象");
} else {
System.out.println("b没被加入字符串池中,新建了对象");
}
}
} 运行结果: b没被加入字符串池中,新建了对象 通过数组参数创建的那个String对象a,也就是abcd是存在了字符池了吗?还是存在了别的地方
楼主【justinavril】截止到2008-07-22 13:15:48的历史汇总数据(不包括此帖):
发帖的总数量:9 发帖的总分数:330 每贴平均分数:36
回帖的总数量:45 得分贴总数量:19 回帖的得分率:42%
结贴的总数量:9 结贴的总分数:330
无满意结贴数:0 无满意结贴分:0
未结的帖子数:0 未结的总分数:0
结贴的百分比:100.00% 结分的百分比:100.00%
无满意结贴率:0.00 % 无满意结分率:0.00 %
敬礼!
看下这贴 可能有帮助 有几个回答很不错
之后b=a.intern();由于变量a中的值并不存在与字符串池中,所以b不会指向a的引用,而是指向一个新创建的对象(该对象.equale(a),但是 该对象!=a)
学习
String b = a.intern(); //这个调用迫使以a这个对象的内容创建一个字符串对象放入池中,并返回池中的这个字符串的引用
这里一比较当然不等啦。