if (s1.equals(s2))
System.out.println("s1 equals s2");
else
System.out.println("s1 not equals s2");
}
}
我们将
s2 用 new 操作符创建
程序输出:
s1 != s2
s1 equals s2
说明:
s1 s2 分别引用了两个"Monday"String 对象
3. 字符串缓冲池
原来,程序在运行的时候会创建一个字符串缓冲池
当使用
s2 = "Monday" 这样的表达是创建字符串的时候,程序首先会
在这个
String 缓冲池中寻找相同值的对象,在第一个程序中,s1 先被
放到了池中,所以在
s2 被创建的时候,程序找到了具有相同值的 s1
将
s2 引用 s1 所引用的对象"Monday"
第二段程序中,使用了
new 操作符,他明白的告诉程序:
"我要一个新的!不要旧的!"于是一个新的"Monday"Sting 对象被创
建在内存中。他们的值相同,但是位置不同,一个在池中游泳
一个在岸边休息。哎呀,真是资源浪费,明明是一样的非要分开做什么呢?
4.
再次更改程序:
public class TestString {
public static void main(String[] args) {
String s1 = "Monday";
String s2 = new String("Monday");
s2 = s2.intern();
if (s1 == s2)
System.out.println("s1 == s2");
else
System.out.println("s1 != s2");
if (s1.equals(s2))
System.out.println("s1 equals s2");
else
System.out.println("s1 not equals s2");
}
}
这次加入:
s2 = s2.intern();
程序输出:
s1 == s2
s1 equals s2