在Java中比较两个值时,如何测试类型和值是否相等?
我知道===可以使用JavaScript 来完成此操作,因此我在Java中尝试了此操作,但是没有用。
我知道这是一个简单的问题,但是我尝试查找它,但找不到它是什么。
lea*_*iro 41
TL; DR
在Java中有没有这样的比较操作符:===,但==还是equals
更长的解释
在弱类型的语言(例如JavaScript)中,可以使用严格的比较运算符(===),因为该语言允许在具有不同类型的变量之间进行比较。
例如,在JavaScript中,如果执行以下操作,则不会出现编译错误:
var x = 10;
var y = 'foo';
console.log(x == y); // false
Run Code Online (Sandbox Code Playgroud)
当您要比较可能包含“等于”值但类型不同的变量时,此方法很有用。
例如
var x = 10;
var y = '10';
console.log(x == y) // true
console.log(x === y) // false
Run Code Online (Sandbox Code Playgroud)
在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
Run Code Online (Sandbox Code Playgroud)
因此,基本上,在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
Run Code Online (Sandbox Code Playgroud)
另外,请注意,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));
}
}
Run Code Online (Sandbox Code Playgroud)
我能够将任何数据类型(数组除外)的值传递给此函数,并且仅在数据类型和值匹配时返回true,否则它将返回false。List和HashMap等派生数据类型也可以使用。
对该函数的调用如下所示:
float s1 = 0.f;
float s2 = 0.1f;
System.out.println(compareData(s1, s2)); //Returns false
Run Code Online (Sandbox Code Playgroud)
float s1 = 0.0f;
float s2 = 0.0f;
System.out.println(compareData(s1, s2)); //Returns true
Run Code Online (Sandbox Code Playgroud)
float s1 = 0.1f;
String s2 = "0.1f";
System.out.println(compareData(s1, s2)); //Returns false
Run Code Online (Sandbox Code Playgroud)
String s1 = "sdf";
String s2 = null;
System.out.println(compareData(s1, s2)); //Returns false
Run Code Online (Sandbox Code Playgroud)
String s1 = null;
String s2 = null;
System.out.println(compareData(s1, s2)); //Returns true
Run Code Online (Sandbox Code Playgroud)
等等...
更新:我也设法比较了数组,下面是代码片段,但是,我没有对此代码进行密集测试,但可以用于我执行的每个测试用例。
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);
Run Code Online (Sandbox Code Playgroud)
以上代码段的用法(以下初始化应在上述代码段之前完成: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
Run Code Online (Sandbox Code Playgroud)
int[] s1 = {1,2,4};
int[] s2 = {1,2,3};
//compareDatab gives false
Run Code Online (Sandbox Code Playgroud)
float[] s1 = {1,2,3};
int[] s2 = {1,2,3};
//compareDatab gives false
Run Code Online (Sandbox Code Playgroud)
其中compareData()与此答案中先前所述的功能相同。
希望这对您有用。:)
| 归档时间: |
|
| 查看次数: |
1012 次 |
| 最近记录: |