比如==,书上说可以用来做基本类型数值之间的比较,也可以用来做对象变量之间的比较。可是请看如下代码: String s = "s"; 
Integer i = new Integer(1); 
if (s == i) { 
} 编译报Incompatible operand types String and Integer的错。 我想知道的是:当比较运算符运用来做对象变量之间的比较的时候,都有那些规则。 谢谢了!

解决方案 »

  1.   

    语法错误!说明楼主对java的基本语法还不熟悉,看看java基本的教科书吧。==比较的双方应该是同一类型的对象,至少是可以cast成同一类型的对象。如果非要拿一个橘子同一台电脑做比较相等,你觉得有意义么?
      

  2.   

    to:manbaumString 和 Integer都是java.lang.Object的子类。
      

  3.   

    他们的实例都可以cast成java.lang.Object类型的对象。
      

  4.   

    如果你想这样比,那你需要用(Object)s == (Object)i这个形式去比较。
      

  5.   

    if ((Object)s == i) {  //先把一个cast成Object 

      

  6.   

    我的理解:==运算符两侧的对象变量需遵循这样的规则,即:其中一方必须能cast成另外一方的类型。请各位指正,谢谢!
      

  7.   

    String 和 Integer 虽同是Object的子类,可是彼此不能相互cast,故不能放在一起比较。而若把Object 和 Integer 型的变量就可以进行比较操作(Integer可以向上cast成Object),所以楼上 intergameover 的说法成立。
      

  8.   

    ==比较的条件可以这么总结:1、对于primary类型,取值比较。
      1.1、同类型的,直接比较。
      1.2、不同类型的,自动将低精度类型cast成高精度类型,然后比较。
    2、对于引用类型的
      2.1、同类型的,比较两个引用是否引用了同一个对象实例。
      2.2、不同类型的
        2.2.1 ==号左侧是右侧的超类,比较是否两个引用是否引用了同一个对象实例。
        2.2.2 否则,抛异常。