others - 在Java中,"==="的等价

在Java中比较两个值时,如何测试类型和值是否相等?

我知道在JavaScript ===可以用来完成这个,所以我试图用Java来实现,但是它并没有这个运算符。

时间:

在Java中,不存在这样的比较运算符: ===,但是可以用==或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代码示例中,如果要对xy进行比较,可以使用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));


 }


}



对此函数的调用如下所示:


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);




//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



希望这对你有用,: )

Java中没有truthy和Falyy的概念,因此没有严格的比较算子。

对于弱类型语言(如Javascript ),===非常有用,因为它验证正在比较的对象有相同的类型,并避免隐式转换。

在强类型语言(如Java )中,===绝对没有用,因为不能比较不同类型的变量。

如果两个变量不是同一类型,则无法进行比较,如果它们不可转换,将引发编译器错误。

没有用于比较的运算符,如果要比较两个引用,则应检查- 1,如果它们指向同一对象。


if(firstreference==secondreference) 



  • 如果以上条件1不满足,则应通过instanceof运算符检查它类型:
  • 
    if (secondreference instanctof classoffirstreference)
    
    
    
    
  • 如果上面的条件2满足,那么你应该通过equals运算符来检查属性比较,
  • 
    firstreference.property1.equals(secondreference.property1)
    
    
    //do this for all properties.
    
    
    
    

...