Если ни одно из вышеперечисленных решений не работает (ничего не работает для меня), то просто RESTART ваш компьютер, и вы сможете подключиться к вашему серверу sql (localhost).
==
сравнивает ссылки на объекты, он проверяет, указывают ли два операнда на один и тот же объект (не эквивалентные объекты, тот же объект).
Если вы хотите для сравнения строк (чтобы увидеть, содержат ли они одни и те же символы), вам нужно сравнить строки с помощью equals
.
В вашем случае, если два экземпляра MyClass
действительно считаются равными, если строки match, тогда:
public boolean equals(Object object2) {
return object2 instanceof MyClass && a.equals(((MyClass)object2).a);
}
... но обычно, если вы определяете класс, в этом случае эквивалентности больше эквивалентности, чем эквивалентность одного поля (a
в этом случае).
Боковое примечание: если вы переопределили equals
, вам почти всегда нужно переопределить hashCode
. Как сказано в equals
JavaDoc :
Обратите внимание, что обычно необходимо переопределить метод
blockquote>hashCode
всякий раз, когда этот метод переопределяется, чтобы поддерживать общий контракт для методаhashCode
, который утверждает, что равные объекты должны иметь одинаковые хэш-коды.
/** Comparing two or more variables. Here the two items are compared and it will return a boolean true or false.
*
* @return equals
*/
public boolean equals(Object item)
{
String emp1 = this.toString();
String emp2 = item.toString();
return emp1.equals(emp2);
}
@Override
//In case you have more than one variable.
public String toString()
{
return a + b;
}
// a and b represent the variables to display.
Здесь вывод будет ложным, false beacuse в первом заявлении sopln, который вы пытаетесь сравнить с типом типа строки типа Myclass с другим типом MyClass, и это разрешит, поскольку оба типа объекта, и вы использовали «== «oprerator», который будет проверять значение ссылочной переменной, сохраняя фактическую память, а не фактические контуры внутри памяти. Во втором sopln также это то же самое, что и вы снова вызываете a.equals (object2), где a является varible внутри object1. Дайте мне знать ваши выводы по этому поводу.
тип возвращаемого объекта object.equals уже имеет значение boolean. нет необходимости обертывать его методом с помощью ветвей. поэтому, если вы хотите сравнить 2 объекта, просто сравните их:
boolean b = objectA.equals(objectB);
b уже либо истинно, либо false.
Похоже, что equals2
просто вызывает equals
, поэтому он даст те же результаты.
Ваша реализация должна понравиться:
public boolean equals2(Object object2) {
if(a.equals(object2.a)) {
return true;
}
else return false;
}
С этой реализацией ваши оба метода будут работать.
Функция перезаписи равна () неверна. Объект «a» является экземпляром класса String, а «object2» является экземпляром класса MyClass. Это разные классы, поэтому ответ «ложный».
Ваш метод equals2()
всегда будет возвращать то же, что и equals()
!!
Ваш код с моими комментариями:
public boolean equals2(Object object2) { // equals2 method
if(a.equals(object2)) { // if equals() method returns true
return true; // return true
}
else return false; // if equals() method returns false, also return false
}
Лучший способ сравнить 2 объекта - это преобразовать их в строки json и сравнить строки, это самое простое решение при работе со сложными вложенными объектами, полями и / или объектами, которые содержат массивы.
sample :
import com.google.gson.Gson;
Object a = // ...;
Object b = //...;
String objectString1 = new Gson().toJson(a);
String objectString2 = new Gson().toJson(b);
if(objectString1.equals(objectString2)){
//do this
}
Gson
, а затем вызывать toJson
. Создание объекта Gson
и вызов логики, необходимой для преобразования фактического объекта в плоский String
(toJson
), являются излишними накладными расходами. Вы можете сравнивать объекты без предварительной конвертации объектов в строки Json (что также быстрее).
– Rolf ツ
20 December 2017 в 14:14
Оператор «==» возвращает true, только если две ссылки указывают на один и тот же объект в памяти. Метод equals (), с другой стороны, возвращает true на основе содержимого объекта.
Пример:
String personalLoan = new String("cheap personal loans");
String homeLoan = new String("cheap personal loans");
//since two strings are different object result should be false
boolean result = personalLoan == homeLoan;
System.out.println("Comparing two strings with == operator: " + result);
//since strings contains same content , equals() should return true
result = personalLoan.equals(homeLoan);
System.out.println("Comparing two Strings with same content using equals method: " + result);
homeLoan = personalLoan;
//since both homeLoan and personalLoand reference variable are pointing to same object
//"==" should return true
result = (personalLoan == homeLoan);
System.out.println("Comparing two reference pointing to same String with == operator: " + result);
Вывод: сравнение двух строк с оператором ==: false Сравнение две строки с одинаковым содержимым с использованием метода equals: true Сравнение двух ссылок, указывающих на ту же строку с оператором ==: true
Вы также можете получить более подробную информацию по ссылке: http: //javarevisited.blogspot .в / 2012/12 / разница между ними-равно-метод-и-равенство-оператор-java.html? т = 1
Если вам не нужно настраивать функцию toString () по умолчанию, другой способ - переопределить метод toString (), который возвращает все сравниваемые атрибуты. затем сравните вывод toString () двух объектов. Я сгенерировал метод toString (), используя IntelliJ IDEA IDE, который включает в себя имя класса в строке.
public class Greeting {
private String greeting;
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
return this.toString().equals(obj.toString());
}
@Override
public String toString() {
return "Greeting{" +
"greeting='" + greeting + '\'' +
'}';
}
}
В приведенном ниже коде вы вызываете метод overriden .equals ().
public boolean equals2 (Object object2) {if (a.equals (object2)) {// здесь вы вызываете override, поэтому вы получаете ложь 2 раза. return true; } else return false; }
Ваш класс может реализовать интерфейс Comparable для достижения той же функциональности. Ваш класс должен реализовать метод compareTo (), объявленный в интерфейсе.
public class MyClass implements Comparable<MyClass>{
String a;
public MyClass(String ab){
a = ab;
}
// returns an int not a boolean
public int compareTo(MyClass someMyClass){
/* The String class implements a compareTo method, returning a 0
if the two strings are identical, instead of a boolean.
Since 'a' is a string, it has the compareTo method which we call
in MyClass's compareTo method.
*/
if(this.a.compareTo(someMyClass.a) == 0) return 0;
return 1;
}
public static void main(String[] args){
MyClass object1 = new MyClass("test");
MyClass object2 = new MyClass("test");
if(object1.compareTo(object2) == 0){
System.out.println("true");
}
else{
System.out.println("false");
}
}
}
Когда мы используем ==, ссылка объекта сравнивается не с фактическими объектами. Нам нужно переопределить метод equals для сравнения объектов Java.
Некоторая дополнительная информация C ++ имеет оператор над загрузкой & amp; Java не обеспечивает оператора при загрузке. Кроме того, в java существуют другие возможности реализации интерфейса сравнения. Он определяет метод compareTo.
Интерфейс компаратора также используется для сравнения двух объектов
вы должны переопределить equals
public boolean equals (Object obj)
{
if (this==obj) return true;
if (this == null) return false;
if (this.getClass() != obj.getClass()) return false;
// Class name is Employ & have lastname
Employe emp = (Employee) obj ;
return this.lastname.equals(emp.getlastname());
}
if (this == null)
в любом случае не нужен; вызов nullObject.equals(whatever)
собирается выбросить исключение нулевого указателя, поэтому мы можем с уверенностью предположить, что this
не является нулевым в любом методе Java, который мы можем написать.
– Maura
3 October 2016 в 21:42
this
имеет lastname
null и не удовлетворяет предыдущим условиям.
– Ahmed Raaj
5 January 2018 в 08:57
Операторы a == object2
и a.equals(object2)
оба всегда будут возвращать false
, потому что a
является string
, а object2
является экземпляром MyClass