iteye_4561 2012-11-08 05: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 05:59
    关注

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

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

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

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

报告相同问题?

悬赏问题

  • ¥15 MATLAB解决问题
  • ¥20 哪位专业人士知道这是什么原件吗?哪里可以买到?
  • ¥15 关于#c##的问题:treenode反序列化后获取不到上一节点和下一节点,Fullpath和Handle报错
  • ¥15 一部手机能否同时用不同的app进入不同的直播间?
  • ¥15 没输出运行不了什么问题
  • ¥20 输入import torch显示Intel MKL FATAL ERROR,系统驱动1%,: Cannot load mkl_intel_thread.dll.
  • ¥15 点云密度大则包围盒小
  • ¥15 nginx使用nfs进行服务器的数据共享
  • ¥15 C#i编程中so-ir-192编码的字符集转码UTF8问题
  • ¥15 51嵌入式入门按键小项目