演示与Java的字符串比较

时间:2010-08-31 19:50:56

标签: java string comparison equals

我想用Java中的几行代码来演示,比较两个字符串(String),你必须使用equals()而不是运算符==。< / p>

这是我尝试过的东西:

public static void main(String Args[]) {
   String s1 = "Hello";
   String s2 = "Hello";

   if (s1 == s2)
      System.out.println("same strings");
   else
      System.out.println("different strings");
}

我期待这个输出:different strings,因为测试s1 == s2我实际上是在比较两个引用(即地址)而不是objet的内容。

但实际上我得到了这个输出:same strings

浏览互联网我发现某些Java实现会优化上述代码,以便s1s2 实际引用相同的字符串。

那么,在比较Java中的字符串(或对象)时,如何使用==运算符演示问题?

3 个答案:

答案 0 :(得分:17)

编译器会根据您的情况进行一些优化,以便s1s2实际上是同一个对象。您可以使用

解决这个问题
String s1 = new String( "Hello" );
String s2 = new String( "Hello" );

然后你有两个不同的对象,文本内容相同。

答案 1 :(得分:2)

  

那么,在比较Java中的字符串(或对象)时,如何使用==运算符来演示问题?

这是一种方式:

String s = "ab";
String t = new String("ab");
System.out.println(s == t); // false

在比较原始包装器和使用自动装箱时也要小心:Integer(和Long)实例缓存(并重新使用!)值-128..127。所以:

Integer s = -128;
Integer t = -128;
System.out.println(s == t);

将打印true,同时:

Integer s = -129;
Integer t = -129;
System.out.println(s == t);

打印false

答案 2 :(得分:0)

JAVA在堆空间中维护一个字符串池,如果可能的话,它会尝试对相同的值进行多次引用。

你写过:

   String s1 = new String ("Hello");
   String s2 = new String ("Hello");

它会给你输出:“不同的字符串”。“new”关键字创建一个新的对象引用,而不给新的将首先检查字符串池是否存在。