【发布时间】:2019-02-15 21:14:31
【问题描述】:
Java如何实现下面的字符串比较
public class MyClass {
public static void main(String args[]) {
String a = "Chaipau";
String b = "pau";
System.out.println(a == "Chai"+"pau"); //true
System.out.println(a == "Chai"+b); //false
}
}
这与How do I compare strings in Java? 不同,因为答案不包含在第二种情况下创建新对象的原因,因为它本可以指向与第一种情况相同的对象引用。
【问题讨论】:
-
不要这样比较字符串。 stackoverflow.com/questions/513832/…
-
这是一个参考比较,不要指望它表现得像值比较
-
是的,但想知道结果是如何获得的。
-
== 比较引用,因此标识对象占用的两个内存区域的“数字”。它是 32 位或 64 位值,具体取决于平台。总之,结果是不确定的,因为它取决于内存的实际状态;这就是原因,因为在比较非原始类型时不应使用 ==。
-
第一个是常量,在字符串常量池中,因此两个引用指向常量池中的同一个东西。第二个不是常量,但您尝试从常量池中引用它,因此是错误的
标签: java string string-comparison