当我想比较两个变量(一个类型的Object,一个Long类型)时,我发现无法将Object转换为Long,例如:
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。
但是,当我将Integer与Object进行比较时结果是不同的:
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
是否有人亲切地告诉我为什么两个结果不同,是否有更好的方法来比较Object和Long?
如果您认为这是一个有意义的问题,那就让我们谈谈吧。感谢。
答案 0 :(得分:0)
Long
和Integer
是不同的类型。你比较了不同类型的对象。
100是int
。所以它被装箱到Integer
。所以可以比较obj和i_num。
答案 1 :(得分:0)
直接前卫 -
Object obj = 100;
这100是一个整数,Object obj
保持整数引用,你可以确保System.out.println(obj.getClass());
打印class java.lang.Integer
。这是auto boxing -
System.out.println(((Long)obj) == l_num);
(Long)Obj
抛出ClassCastException
,因为它试图将Integer
对象转换为无效的Long
对象。
写表格将是 -
System.out.println(((Long)((Integer)obj).longValue()) == l_num); // it return true