background image

         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