2014-01-20 41 views
-2

当我要比较两个变量(一个Object类型,一种类型的龙),我发现不能转换对象长,例如:比较对象和长及整数

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

有没有人请你告诉我,为什么两个结果是不同的,有没有更好的方法与龙比较对象?

如果您认为这是一个有意义的问题,让我们来谈谈它。谢谢。

+1

考虑一下你是比较,并试图转换为'100' VS'100L'。 –

+0

你认为这个'(obj.toString())。equals(l_num.toString())'是做什么的? –

+0

我没有看到任何奇怪的事情发生在这里-_- – Baby

回答

0

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

100是int。所以它被装箱到Integer。所以可以比较obj和i_num。

0

其preety直截了当 -

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 
+0

Thx,这件事是obj的真正类型。 – Diansonn

+0

可以举个例子 –