String字符比较


通常我们使用String创建一个字符串方法是给String引用变量赋值:

   String s = "test string";

也可以使用java语言的特性new一个对象来创建一个字符串:

    String s = new String("test string");

上面两种方式看似是等效的,先来段代码看看:

String s1 = "Hello world";
String s2 = "Hello world";

System.out.println(s1==s2);

String s3 = new String("Hello world");
String s4 = new String("Hello world");

System.out.println(s3 == s4);

输出结果为true false

可以看出如果使用关键字new,JVM始终会创建一个新的String实例。使用给String赋值的方法未必创建新的对象,如果字符串“Hello world”之前已经存在,那么再使用String赋值时它可能来自之前存在的内存池中。

使用 == 运算符比较两个String对象的方法几乎是没有什么用处,因为比较的是两个变量引用的地址。通常采用equals方法:

    if (s1 != null && s1.equals("Hello world")){
      ...
      }

or

if ("Hello world".equals(s1)){ ... }

最后附上String实现的源码里面介绍的很详细