Направих функция, която 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));
}
}
Успях да предам стойности от всякакъв тип данни (с изключение на масив) към тази функция, както и да получа true само ако типът данни и стойностите съвпадат, в противен случай тя връща false. Изведените типове данни като 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 или числа (Integer
доInteger
илиDouble
доDouble
), но за примитиви и други референтни типове е==
, но ако сравняватеInteger
сDouble
(различни типове в кутия), тогава няма еквивалент. В крайна сметка опитайте се да разберете как работи всеки оператор на конкретния език, който използвате. Правенето на аналогии между двата различни езика вероятно ще бъде по-скоро объркващо, отколкото полезно. - person M A   schedule 24.06.2019