到目前为止,我一直在程序中使用==运算符来比较所有的字符串。 然而,我遇到了一个错误,将其中一个改为.equals(),它修复了这个错误。
==不好吗?什么时候应该使用,什么时候不应该使用?有什么不同?
到目前为止,我一直在程序中使用==运算符来比较所有的字符串。 然而,我遇到了一个错误,将其中一个改为.equals(),它修复了这个错误。
==不好吗?什么时候应该使用,什么时候不应该使用?有什么不同?
当前回答
我同意zacherates的回答。
但是你能做的是在非文字字符串上调用intern()。
来自zacherates的例子:
// ... but they are not the same object
new String("test") == "test" ==> false
如果你实习非文字字符串相等为真:
new String("test").intern() == "test" ==> true
其他回答
您还可以使用compareTo()方法来比较两个string。如果compareTo结果为0,则两个字符串相等,否则被比较的字符串不相等。
==比较引用,不比较实际字符串。如果你确实使用new string (somestring).intern()创建了每个字符串,那么你可以使用==操作符来比较两个字符串,否则只能使用equals()或compareTo方法。
所有对象都保证有一个.equals()方法,因为Object包含一个返回布尔值的方法。equals()。如果需要进一步的定义,子类的工作就是重写这个方法。如果没有它(即使用==),则只检查两个对象之间的内存地址是否相等。String重写了这个.equals()方法,它没有使用内存地址,而是返回字符级别的字符串的相等性比较。
A key note is that strings are stored in one lump pool so once a string is created it is forever stored in a program at the same address. Strings do not change, they are immutable. This is why it is a bad idea to use regular string concatenation if you have a serious of amount of string processing to do. Instead you would use the StringBuilder classes provided. Remember the pointers to this string can change and if you were interested to see if two pointers were the same == would be a fine way to go. Strings themselves do not.
==比较对象引用。
.equals()比较字符串值。
有时==会产生比较String值的错觉,如下所示:
String a="Test";
String b="Test";
if(a==b) ===> true
这是因为当您创建任何String字面值时,JVM首先在String池中搜索该字面值,如果找到匹配,则将相同的引用给予新的String。因此,我们得到:
(a==b) ==>为真
String Pool
b -----------------> "test" <-----------------a
但是,==在以下情况下失效:
String a="test";
String b=new String("test");
if (a==b) ===> false
在这种情况下,对于new String("test"),语句new String将在堆上创建,并且该引用将被赋予给b,因此b将被赋予堆上的引用,而不是在String池中。
现在a指向String池中的String,而b指向堆中的String。因此我们得到:
如果(a==b) ==>假。
String Pool
"test" <-------------------- a
Heap
"test" <-------------------- b
而.equals()总是比较String的值,所以在这两种情况下都是true:
String a="Test";
String b="Test";
if(a.equals(b)) ===> true
String a="test";
String b=new String("test");
if(a.equals(b)) ===> true
所以使用.equals()总是更好。
==操作符检查两个字符串是否完全相同的对象。
equals()方法将检查两个字符串是否具有相同的值。
操作符==总是用于对象引用比较,而String类.equals()方法用于内容比较被重写:
String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(s1 == s2); // It prints false (reference comparison)
System.out.println(s1.equals(s2)); // It prints true (content comparison)