iteye_4561 2012-11-08 13:23
浏览 221
已采纳

String转化为Object之后调用equals.为什么使用的还是String.equals

[code="java"]public class Atest {
public static void main(String[] args)
{
String a = new String("test");
String b = new String("test");
System.out.println(a.equals(b));
System.out.println(a==b);

    System.out.println(((Object)a).equals((Object)b));
    System.out.println(Atest.compare(a, b));
    System.out.println(Atest.isStr((Object)a));
}
public static  boolean compare(Object a,Object b)
{
    return a.equals(b);
}
public static boolean isStr(Object a)
{
    if (a instanceof String) 
    {
        return true;
    }
    return false;
}

}[/code]

代码运行结果为
true
false
true
true
true
我想知道为什么后三个是true.
String向上转化为Object后,调用的如果是Ojbect.equals的话,应该是false的。
Object的equals的实现
public boolean equals(Object obj) {
return (this == obj);
}

  • 写回答

6条回答 默认 最新

  • abing37 2012-11-08 13:59
    关注

    “父类的引用可以指向子类的对象”,这是java的继承的基本语法。

    String a="aa";
    Object b=(Object)a;

    尽管b是一个Object的引用,但是指向的确实子类String的对象a.
    运行期的方法调用都是和具体的对象确切类型绑定的,调用b.equals方法其实是调用子类String的equals方法。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 matlab有限元法求解梁带有若干弹簧质量系统的固有频率
  • ¥15 找一个网络防御专家,外包的
  • ¥100 能不能让两张不同的图片md5值一样,(有尝)
  • ¥15 informer代码训练自己的数据集,改参数怎么改
  • ¥15 请看一下,学校实验要求,我需要具体代码
  • ¥50 pc微信3.6.0.18不能登陆 有偿解决问题
  • ¥20 MATLAB绘制两隐函数曲面的交线
  • ¥15 求TYPCE母转母转接头24PIN线路板图
  • ¥100 国外网络搭建,有偿交流
  • ¥15 高价求中通快递查询接口