到目前为止,我一直在程序中使用==运算符来比较所有的字符串。 然而,我遇到了一个错误,将其中一个改为.equals(),它修复了这个错误。
==不好吗?什么时候应该使用,什么时候不应该使用?有什么不同?
到目前为止,我一直在程序中使用==运算符来比较所有的字符串。 然而,我遇到了一个错误,将其中一个改为.equals(),它修复了这个错误。
==不好吗?什么时候应该使用,什么时候不应该使用?有什么不同?
当前回答
在Java中,当使用==运算符比较两个对象时,它会检查两个对象是否指向内存中的相同位置。换句话说,它检查两个对象名称是否基本上引用了相同的内存位置。
Java String类实际上重写了Object类中的默认equals()实现——它重写了该方法,以便它只检查字符串的值,而不检查它们在内存中的位置。 这意味着如果调用equals()方法来比较两个String对象,那么只要实际的字符序列相等,两个对象就被认为是相等的。
==操作符检查两个字符串是否完全相同的对象。
equals()方法检查两个字符串是否具有相同的值。
其他回答
在Java中,当使用==运算符比较两个对象时,它会检查两个对象是否指向内存中的相同位置。换句话说,它检查两个对象名称是否基本上引用了相同的内存位置。
Java String类实际上重写了Object类中的默认equals()实现——它重写了该方法,以便它只检查字符串的值,而不检查它们在内存中的位置。 这意味着如果调用equals()方法来比较两个String对象,那么只要实际的字符序列相等,两个对象就被认为是相等的。
==操作符检查两个字符串是否完全相同的对象。
equals()方法检查两个字符串是否具有相同的值。
是的,很糟糕……
==表示两个字符串引用是完全相同的对象。您可能听说过这种情况,因为Java保留了某种文字表(它确实如此),但情况并非总是如此。一些字符串以不同的方式加载,从其他字符串构造,等等,所以永远不要假设两个相同的字符串存储在相同的位置。
Equals为你做真正的比较。
功能:
public float simpleSimilarity(String u, String v) {
String[] a = u.split(" ");
String[] b = v.split(" ");
long correct = 0;
int minLen = Math.min(a.length, b.length);
for (int i = 0; i < minLen; i++) {
String aa = a[i];
String bb = b[i];
int minWordLength = Math.min(aa.length(), bb.length());
for (int j = 0; j < minWordLength; j++) {
if (aa.charAt(j) == bb.charAt(j)) {
correct++;
}
}
}
return (float) (((double) correct) / Math.max(u.length(), v.length()));
}
测试:
String a = "This is the first string.";
String b = "this is not 1st string!";
// for exact string comparison, use .equals
boolean exact = a.equals(b);
// For similarity check, there are libraries for this
// Here I'll try a simple example I wrote
float similarity = simple_similarity(a,b);
==操作符检查两个引用是否指向同一个对象。.equals()检查实际的字符串内容(值)。
注意.equals()方法属于类Object(所有类的超类)。您需要根据您的类需求重写它,但是对于String,它已经实现了,并且它检查两个字符串是否具有相同的值。
Case 1 String s1 = "Stack Overflow"; String s2 = "Stack Overflow"; s1 == s2; //true s1.equals(s2); //true Reason: String literals created without null are stored in the String pool in the permgen area of heap. So both s1 and s2 point to same object in the pool. Case 2 String s1 = new String("Stack Overflow"); String s2 = new String("Stack Overflow"); s1 == s2; //false s1.equals(s2); //true Reason: If you create a String object using the new keyword a separate space is allocated to it on the heap.
==比较对象的引用值,而java.lang.String类中的equals()方法比较String对象的内容(与另一个对象)。