Что не так с этим логическим методом?

1

Привет, у меня есть этот метод, который я создал. Его задача - получить целое число A, которое может быть равно 10 или 30. Оно предназначено для возврата TRUE, если значение равно десяти, и false в противном случае.

public static boolean checkStatus(int a){
        if(a.equals(10)){
              return true;
        }
      return false;
    }

По какой-то причине я получаю ошибку компиляции в условии if (a.equals(10)), которое говорит, что INT НЕ МОЖЕТ БЫТЬ ЗАВЕРШЕН. Если я не ошибаюсь, разве метод.equals() - это способ пойти в этом случае?

Спасибо за вашу помощь!

  • 4
    О чем говорит ошибка компиляции?
  • 0
    проверка отредактирована, извините
Показать ещё 3 комментария
Теги:
methods
equals
return
boolean

8 ответов

9
Лучший ответ

Примитивы в Java (int, long, float и т.д.) Не имеют методов-членов, поэтому вызов

if (a.equals(10))

не будет компилироваться, поскольку вы пытаетесь удалить ссылку на примитив. Вместо этого вы хотите использовать оператор == для сравнения примитивных значений:

if (a == 10)

и зарезервировать использование метода equals() для не примитивных Objects

  • 0
    Не могли бы вы объяснить, когда метод .equals () будет уместным. Я постоянно забываю этот :( Спасибо!
  • 0
    @ user3029345 Вы должны использовать .equals () только при сравнении объектов.
Показать ещё 2 комментария
5

Вы можете использовать equals для объектов, но int является примитивным типом (a) а не объектом.

Следовательно, вам нужно что-то вроде:

public static boolean checkStatus (int a) {
    if (a == 10)
        return true;
   return false;
}

или более короткий и более разумный (в данном случае):

public static boolean checkStatus (int a) {
    return (a == 10);
}

(а) Пуристы будут утверждать, что это доказательство того, что Java на самом деле не является объектно-ориентированным языком, но это потому, что они бредют безумие :-)

  • 0
    +1 для сокращения (a == 10). Избыточный, если заявления бесполезны.
  • 0
    Просто любопытно, нет ли автобокса для ОП?
Показать ещё 3 комментария
2

equals используется для непримитивов в основном для объектов.

== используется для примитивов.

Таким образом, вы можете использовать его

public static boolean checkStatus (int a) {
    if (a == 10)
        return true;
   return false;
}

Пример 1: для объекта, если метод equals переопределен, метод "equals" возвращает true.

public class Employee {
    int id;

    @Override
    public boolean equals(Object obj) {
        Employee e = (Employee) obj;
        return id == e.id;
    }

    Employee(int id) {
        this.id = id;
    }

    public static void main(String[] args) {
        Employee e1 = new Employee(5);
        Employee e2 = new Employee(5);
        System.out.println("e1.equals(e2) is: " + e1.equals(e2));
        System.out.println("(e1 == e2) is: " + (e1 == e2));
    }
}

Вывод:

e1.equals(e2): true

(e1 == e2): false

Пример 2. Для объекта, если метод equals не переопределен, тогда метод "equals" работает как "=="

public class Employee {
    int id;

    Employee(int id) {
        this.id = id;
    }

    public static void main(String[] args) {
        Employee e1 = new Employee(5);
        Employee e2 = new Employee(5);
        System.out.println("e1.equals(e2) is: " + e1.equals(e2));
        System.out.println("(e1 == e2) is: " + (e1 == e2));
    }
}

Вывод:

e1.equals(e2): false

(e1 == e2): false

Здесь метод "equals" работает как "==". Поэтому не забудьте переопределить метод equals для объекта.

1

int - примитив в Java, а примитивы не имеют поведения как методы.

поэтому вы не можете вызвать .equals по int. Таким образом, варианты здесь - использовать ==

public static boolean checkStatus(Integer a){
  return (a==10);
}

или преобразовать int в Integer, который является классом-оболочкой

public static boolean checkStatus(Integer a){
    return a.equals(10);
}
1

Вы можете использовать

public static boolean checkStatus(int a){
        if(a==10){
              return true;
        }
      return false;
    }

или

public static boolean checkStatus(Integer a){

        if(a.equals(new Integer(10))){
              return true;
        }
      return false;
    }
  • 0
    Не уверен, что я бы создал совершенно новый объект во втором случае, когда вы могли бы просто сделать if (a.intValue() == 10) .
1

Вы можете сделать что-то подобное с помощью класса Integer

  Integer x = 5;
  Integer y = 10;
  Integer z =5;
  Short a = 5;

  System.out.println(x.equals(y));  
  System.out.println(x.equals(z)); 
  System.out.println(x.equals(a));

Вывод:

  false
  true
  false
1

Вы можете, конечно, обернуть целое число как:

Integer i = new Integer(a);

Тогда функция равенства может быть использована с "i", новым объектом Integer.

1

Метод equals() относится к классу Object класса Java и должен override все классы объектов, такие как String, Integer and MyObject(implemented class). Но int не является Java Object и там нет метода equals().

вы можете просто использовать == с значениями int, и вы можете упростить свой код, как показано ниже.

public static boolean checkStatus(int a){
    return a==10;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню