java string 转 object_关于java:将String转换为Object时调用toString()

本问题已经有最佳答案,请猛点这里访问。

这是我的示例代码:

String str ="hello";

Object obj = (Object)str;

System.out.println(obj.toString());

我找到了Object的源代码,toString()方法是:

public String toString() {

return getClass().getName() +"@" + Integer.toHexString(hashCode());

}

我认为这个例子的结果是这个Object的地址,比如[B @ 15db9742,在我将str转换为Object之后,但它仍然打印你好。 为什么? Shound not obj使用Object的方法? 任何人都可以向我解释它的原理吗?

欢迎来到多态。 :-)(必须有一个dupetarget为此。)

方法重写 - 您只更改引用类型,实际对象仍然是String,toString的toString返回实际字符串

请看一下这个问题:stackoverflow.com/questions/321864/

......但我找不到一个非常好的人。 但这只是我没时间去搜索。

你没有将String转换为Object - 你正在施放(在这种情况下,施法甚至是不必要的,你可以在没有施法的情况下进行Object obj = str;)。 转换不会改变(即转换)对象。

这是多态(特别是运行时多态)。无论对象的引用类型是什么(Object或String),只要该类型具有toString(因此您的代码编译),将使用的toString是对象本身实际具有的那个,不一定是您的引用类型提供的那个。在这种情况下,无论您对它的引用类型是什么,对象都是String,因此使用String#toString。

因为底层对象是一个String对象,而String类已覆盖其中的toString()方法。

虽然左侧有Object类型,但实现的Class中的方法会被执行,整个现象称为Polymorphism。您只是将String的形式更改为Object。

当你这样做

这不会改变String到Object类。您只是更改Object的类型而不是它的实际行为。

虚方法调用意味着在给定实际实现的情况下将执行方法覆盖,而不是在引用类型中实现。

换句话说,即使转换为Object,String实例仍会调用String中实现的Object方法的覆盖。

对象obj是(不必要的)强制转换的结果,但仍然是一个String ....

String类实现了toString方法的覆盖:

public String toString() {

return this;

}

通过执行以下操作验证obj是否为String:

System.out.println(str.getClass());

System.out.println(obj.getClass());

你会得到

class java.lang.String

class java.lang.String

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值