Java 中的“===”等效项
在Java中比较两个值时,如何测试类型和值是否相等?
我知道在JavaScript中可以用来实现这一点,所以我在Java中尝试过,但它不起作用。===
我知道这是一个简单的问题,但我试着查了一下,我找不到它是什么。
在Java中比较两个值时,如何测试类型和值是否相等?
我知道在JavaScript中可以用来实现这一点,所以我在Java中尝试过,但它不起作用。===
我知道这是一个简单的问题,但我试着查了一下,我找不到它是什么。
TL;DR
在 Java 中没有这样的比较运算符:, 但是 or===
==
equals
更长的解释
在弱类型语言(如 JavaScript)中,您可以使用严格比较运算符 (),因为该语言允许在具有不同类型的变量之间进行比较。===
例如,在 JavaScript 中,如果您执行以下操作,则不会收到编译错误:
var x = 10;
var y = 'foo';
console.log(x == y); // false
当您想要比较可能包含“等于”但可能属于不同类型的值的变量时,它很有用。
例如
var x = 10;
var y = '10';
console.log(x == y) // true
console.log(x === y) // false
在强类型语言(如 Java)中,您不需要使用严格的比较运算符,因为该语言已经“处理”了类型比较。
例如:
int x = 10;
String y = "10";
System.out.println("10" == y); // true
System.out.println(x == y); // compile error : Incompatible operand types int and String
因此,基本上,在Java中,不需要检查使用(报告语法错误)的严格性。===
首先,当您使用运算符比较不同类型的值并且无法执行转换时,编译器会抱怨。==
在前面的 Java 代码示例中,如果要在 和 之间进行比较,可以使用:x
y
equals
int x = 10;
String y = "10";
System.out.println(y.equals(x)); // compile warning: Unlikely argument type for equals(): int seems to be unrelated to String
作为旁注,请注意不能在基元类型上调用 equals
方法。
一些有用的读物是:
我做了一个函数,它复制了Java中Javascript的===的功能。
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() 与本答案中前面所述的函数相同。
希望这对您有用。:)