演示与Java的字符串比较

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

这是我尝试过的东西:

 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中的字符串(或对象)时,如何使用==运算符来演示问题?

编译器会根据您的情况进行一些优化,以便s1s2实际上是同一个对象。 你可以通过使用来解决这个问题

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

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

那么,在比较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

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

你写过:

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

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