在基元的情况下,==操作员检查两个值是否相同。如果它不是基元,则检查它是否是指向对象的同一实例的两个指针(或引用)。该equals()方法执行自定义检查Object,通过使用检查引用==。但在其他课程中,有时会equals()被覆盖(我不知道这是否是正确的过去分词)。equals()必须检查内容。所以,例如:int i0 = 34;int i1 = 34;int i2 = 35;// resultsi0 == i1: truei1 == i0: truei2 == i0: false但如果我们有非基元String str0 = new String("Hello man!");String str1 = new String("Hello man!");String str2 = new String("!nam olleH");String str2copy = str2;// Resultsstr0 == str1: false // Pointer to two different object, so == will give falsestr1 == str2: false // Idemstr2 == str2copy: true // So this are two pointers to the same objectstr0.equals(str1): true // This are not the same objects, but they are equalstr1 == str1: true // Again: two times a pointer to the same object那么,为什么要str0.equals(str1)回归true?因为String类具有覆盖equals()。并且在该方法中,它不会通过执行来检查它们是否相等return this == obj;但是在该方法中,存在完整的检查。我不知道他们使用哪种方法来比较两个字符串,但这里有两种可能的方法:从两个字符串生成一个哈希码并检查它们是否相等(int == int)如果字符相同,则逐字符检查。所以我希望现在很清楚。