Привет, у меня есть этот метод, который я создал. Его задача - получить целое число 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() - это способ пойти в этом случае?
Спасибо за вашу помощь!
Примитивы в Java (int
, long
, float
и т.д.) Не имеют методов-членов, поэтому вызов
if (a.equals(10))
не будет компилироваться, поскольку вы пытаетесь удалить ссылку на примитив. Вместо этого вы хотите использовать оператор ==
для сравнения примитивных значений:
if (a == 10)
и зарезервировать использование метода equals()
для не примитивных Objects
Вы можете использовать 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 на самом деле не является объектно-ориентированным языком, но это потому, что они бредют безумие :-)
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 для объекта.
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);
}
Вы можете использовать
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;
}
if (a.intValue() == 10)
.
Вы можете сделать что-то подобное с помощью класса 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
Вы можете, конечно, обернуть целое число как:
Integer i = new Integer(a);
Тогда функция равенства может быть использована с "i", новым объектом Integer.
Метод equals()
относится к классу Object
класса Java
и должен override
все классы объектов, такие как String, Integer and MyObject(implemented class)
. Но int
не является Java Object
и там нет метода equals()
.
вы можете просто использовать ==
с значениями int, и вы можете упростить свой код, как показано ниже.
public static boolean checkStatus(int a){
return a==10;
}