toString和 强转(String)的区别?

kimsung 2010-01-06 05:14:06

public static void main(String args[]) {
Map m = new HashMap();
m.put("1", new Integer(1));

String a = m.get("1").toString(); // .toString
String b = (String)m.get("1"); // 强转
}


这里强转和 .toString有什么区别?
...全文
6465 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
aold619 2011-11-16
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 zidasine 的回复:]

用 String.valueOf(x);
x==null return null
否则 return x.toString();
[/Quote]
虽然不太懂什么意思,但是解决了我今天遇到的一个需要把数组类型数据转换为String类型的问题,希望哪天能看到您解释一下。
「已注销」 2011-08-19
  • 打赏
  • 举报
回复
学习了~
kimsung 2010-01-08
  • 打赏
  • 举报
回复
谢谢大家.我得到满意答案了.

我原本以为 强转(String)其实在运行期还是会以 .tostring方式执行.

谢谢你1楼.
我在15楼, 23楼当中得到了我想要的答案.谢谢~!.

这代码编译通过,但运行错误! 在实际做Java程序当中会经常碰到这种问题.我感觉15楼兄弟的方法挺好的.

23楼这位说的已经很清楚了. 对象一经建立就有他们的类型, 转只是对他的看法不同而已~~ 我明白了.谢谢你~!
子龙奶爸 2010-01-07
  • 打赏
  • 举报
回复
顶一楼,比喻太生动了~~
Z_FEI 2010-01-07
  • 打赏
  • 举报
回复 1
每个对象都有toString方法,该方法可以被重写成你自己想把该对象已String类型输出的任何表述!而保持该对象原有类型!如果该对象为null则报错!(String)是把对象强转成String类型,改变了该对象的原有类型!如果该对象不能强转成String类型会报错!
psyuhen 2010-01-07
  • 打赏
  • 举报
回复

public static void main(String args[]) {
Map m = new HashMap();
m.put("1", new Integer(1));

String a = m.get("1").toString(); // .toString
String b = (String)m.get("1"); // 强转
}

其实每一个对象都有它的toString方法,因为它继承了OBject类。除非对象为NULL时才会报错。
如果强制。
这样的话,如果你强制转换的对象为NULL的话,那就可能报错。同时如果对象不是String的话,那么
也可能报错。
树成 2010-01-07
  • 打赏
  • 举报
回复
在任何对象使用调研toString方法之前,最好验证一下对象是否为null,这是最理想的做法。
如果不想之前验证,那么就要用String.valueOf方法来处理对象或者数据类型。
fengfengye 2010-01-07
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 tianweishuiguo 的回复:]
引用 1 楼 xlxyeyu 的回复:
toString一个方法,任何一个对象都可以有自己的字符串表达方式,就要比任何物品都可以有自己的名字一样,你可以重写这个方法,返回你需要的字符串数据

而强制类型转换成String,就是将原本不是String类型的对象转换成String类型,它不会去调用tostring方法。这就相当于你将物品A当成物品B来使用,如果两者不能转换的话,就相当于你把石头当救生圈使用了。。


嗯嗯嗯~~
[/Quote]

牛!
piweeping 2010-01-07
  • 打赏
  • 举报
回复
这比喻,太有才了e
t2xingzhe 2010-01-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xlxyeyu 的回复:]
toString一个方法,任何一个对象都可以有自己的字符串表达方式,就要比任何物品都可以有自己的名字一样,你可以重写这个方法,返回你需要的字符串数据

而强制类型转换成String,就是将原本不是String类型的对象转换成String类型,它不会去调用tostring方法。这就相当于你将物品A当成物品B来使用,如果两者不能转换的话,就相当于你把石头当救生圈使用了。。
[/Quote]

太强了,是不是老师啊,这么形象

不知道六楼的下塑造型是什么意思,不过他的头像很猥琐。。。
lym158074189 2010-01-07
  • 打赏
  • 举报
回复
UP
Dan1980 2010-01-07
  • 打赏
  • 举报
回复
When you use 'String a = (String)b', b must be a String itself, or you'll get one of the following:

a) A compile-time error, if b is not defined as a's super class type;
b) A ClassCastException at runtime, if b is defined as a's super class type.

While 'String a = b.toString()' will always work. Because any class of Object has a toString() method with a return type of String.
jacky68147527 2010-01-07
  • 打赏
  • 举报
回复
UP
applerockhool 2010-01-07
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 spiniper 的回复:]
在任何对象使用调研toString方法之前,最好验证一下对象是否为null,这是最理想的做法。
如果不想之前验证,那么就要用String.valueOf方法来处理对象或者数据类型。
[/Quote]

你的意思,
String.valueOf(null)
不会报错吗。呵呵,你可以试下
_skyfish 2010-01-07
  • 打赏
  • 举报
回复
.tostring()是从object继承来的,任何一个类都有这个方法,所以调用这个方法是得到的不一定是你要的字符串,
string是一种强制类型转换,二者没有可比性
Dazzlingwinter 2010-01-07
  • 打赏
  • 举报
回复
就一楼的标准答案了,O(∩_∩)O哈哈~
weihthchk 2010-01-07
  • 打赏
  • 举报
回复
“转”这个术语,其实是不确切的,或者说是不科学的。
一个对象一经建立,其类型已经确定,所谓的“强转”不过是强行改变你看待它的方式。所以,英文中类型“转换”叫做Type Casting或者Class Casting,使用cast以说明改变的是其外在。
SQL Server有一个用来转型的函数叫做cast,后来提供了另一个函数叫做convert,二者略有不同,相差很小,官方推荐用convert,其实就是因为这两个函数实际上改换了数据的内在类型,所以用convert表述更为精准。
理解了我这段话,你就知道toString和强“转”之间有什么区别了。
zidasine 2010-01-07
  • 打赏
  • 举报
回复
用 String.valueOf(x);
x==null return null
否则 return x.toString();
welllit 2010-01-07
  • 打赏
  • 举报
回复
aa.toString会报空指针错,(String)aa 确不会。
bobo364 2010-01-07
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 z_fei 的回复:]
每个对象都有toString方法,该方法可以被重写成你自己想把该对象已String类型输出的任何表述!而保持该对象原有类型!如果该对象为null则报错!(String)是把对象强转成String类型,改变了该对象的原有类型!如果该对象不能强转成String类型会报错!
[/Quote]

正确,接分
加载更多回复(14)

62,636

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧