当我想比较两个变量时(一种类型对象,一个类型长),我发现不能将对象转换为长度,例如:
Object obj = 100;
Long l_num = 100L;
System.out.println(obj.equals((Object)l_num)); // print false
System.out.println(((Long)obj) == l_num); // throw java.lang.ClassCastException Exception
然后我只能将两者与(obj.toString()).equals(l_num.toString())
进行比较,它返回true。
但是,当我将整数与对象进行比较时,结果是不同的:
Object obj = 100;
Integer i_num = 100;
System.out.println(((Integer)obj) == i_num); // return true
System.out.println(obj.equals(i_num)); // return true
System.out.println((obj.toString()).equals(i_num.toString())); // return true
有人友善地告诉我为什么两个结果有所不同,并且有什么方法可以更好地比较对象?
如果您认为这是一个有意义的问题,请让我们谈谈。谢谢。
Long
和 Integer
是不同的类型。您比较了不同类型的对象。
100是int
。因此将其装箱到Integer
。因此可以比较obj和i_num。
它的前进 -
Object obj = 100;
此100是一个整数,Object obj
保留该整数参考,您可以通过打印class java.lang.Integer
的System.out.println(obj.getClass());
确保。这是自动拳击的一个例子 -
System.out.println(((Long)obj) == l_num);
(Long)Obj
将ClassCastException
抛出,因为它试图将Integer
对象施加到无效的Long
对象。
写入表格是 -
System.out.println(((Long)((Integer)obj).longValue()) == l_num); // it return true