[英]Demonstrating string comparison with 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实现将优化上面的代码,以便s1
和s2
实际上将引用相同的字符串。
那么,在比较Java中的字符串(或对象)时,如何使用==
运算符来演示问题?
编译器会根据您的情况进行一些优化,以便s1
和s2
实际上是同一个对象。 你可以通过使用来解决这个问题
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”关键字创建一个新的对象引用,而不给新的将首先检查字符串池是否存在。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.