Я сделал функцию, которая r воплощает функциональность === Javascript в Java.
static boolean compareData(Object v1, Object v2)
{
if(v1 != null && v2 != null)
return (v1.getClass() == v2.getClass() && (v1.toString().equals(v2.toString())));
else
{
return (v1 == null ? v2 == null : v1.equals(v2));
}
}
Мне удалось передать значения любого типа данных (кроме массива) в эту функцию, а также получить истину, только если тип данных и значения совпадают, иначе она вернет ложь. Производные типы данных, такие как List и HashMap, также работают.
Вызов этой функции выглядит так:
float s1 = 0.f;
float s2 = 0.1f;
System.out.println(compareData(s1, s2)); //Returns false
float s1 = 0.0f;
float s2 = 0.0f;
System.out.println(compareData(s1, s2)); //Returns true
float s1 = 0.1f;
String s2 = "0.1f";
System.out.println(compareData(s1, s2)); //Returns false
String s1 = "sdf";
String s2 = null;
System.out.println(compareData(s1, s2)); //Returns false
String s1 = null;
String s2 = null;
System.out.println(compareData(s1, s2)); //Returns true
и так далее...
Обновление: Мне также удалось сравнить массивы, ниже показан фрагмент кода, но я не тестировал этот код интенсивно, но работал с каждым выполненным мной тестовым примером.
if(s1 != null && s2 != null)
if(s1.getClass().isArray() && s2.getClass().isArray())
compareDatab = s1.getClass().equals(s2.getClass()) && (Arrays.toString(s1).equals(Arrays.toString(s2)));
else
compareDatab = compareData(s1, s2);
else
compareDatab = compareData(s1, s2);
Использование приведенного выше фрагмента (следующие инициализации должны быть выполнены до фрагмента кода выше, smh: P):
//s1 and s2 can be anything including Arrays and non-Array...
int[] s1 = {1,2,3};
int[] s2 = {1,2,3};
//compareDatab gives true
int[] s1 = {1,2,4};
int[] s2 = {1,2,3};
//compareDatab gives false
float[] s1 = {1,2,3};
int[] s2 = {1,2,3};
//compareDatab gives false
Где compareData () - та же функция, что указана ранее в этом ответе.
Надеюсь, это окажется для вас полезным. :)
person
FutureJJ
schedule
23.06.2019
a.equals(b)
правильно написаннымequals
методом. - person luk2302   schedule 20.06.2019===
нельзя использовать для проверки эквивалентности и типа, и значения.var obj_a = {1: 2}; var obj_b = {1: 2}; console.log(obj_a === obj_b); // result is false
- person LiuXiMin   schedule 24.06.2019===
означаетstrictly equal
в JavaScript. Нельзя использовать для объектов, массивов, функций. Дополнительные сведения см. здесь. - person LiuXiMin   schedule 24.06.2019===
в Java, на самом деле.equals()
, если вы сравниваетеString
s или Numbers (Integer
доInteger
или отDouble
доDouble
), но для примитивов и других ссылочных типов это==
, но при сравненииInteger
сDouble
(разные типы в штучной упаковке) эквивалента нет. В итоге постарайтесь понять, как каждый оператор работает на конкретном языке, который вы используете. Проведение аналогий между двумя разными языками скорее запутает, чем поможет. - person M A   schedule 24.06.2019