比较Object和Long& Integer

时间:2014-01-20 03:53:49

标签: java object compare

当我想比较两个变量(一个类型的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?

如果您认为这是一个有意义的问题,那就让我们谈谈吧。感谢。

2 个答案:

答案 0 :(得分:0)

LongInteger是不同的类型。你比较了不同类型的对象。

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