【问题标题】:Compare Object and Long&Integer比较 Object 和 Long&Integer
【发布时间】:2014-01-20 03:53:49
【问题描述】:

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

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

【问题讨论】:

  • 考虑您要比较并尝试投射到的对象,100100L
  • 你觉得这个(obj.toString()).equals(l_num.toString()) 有什么作用?
  • 我没有看到这里发生了什么奇怪的事情-_-

标签: java object compare


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    它的可爱直截了当-

    Object obj = 100;
    

    这 100 是一个整数,Object obj 持有该整数引用,您可以通过打印class java.lang.IntegerSystem.out.println(obj.getClass()); 确定。这是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 
    

    【讨论】:

    • 谢谢,问题是obj的真实类型。
    • 你能举个例子吗
    猜你喜欢
    • 1970-01-01
    • 2018-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-29
    • 1970-01-01
    • 2012-10-22
    相关资源
    最近更新 更多