简述

在Java中,往往需要把一个类型的变量转换成String 类型。作为菜鸟,有时候我会使用(String) data,有时候就使用data.toString(),如果不行还会试试 String.valueOf(data),但始终不是很清楚它们有什么不同。前几天在coding,由于是用gwt-ext编写界面的时候出现了转型错误,所以也没有提示java.lang.ClassCastException的异常,只是提示gwt exception thrown and not caught。找了半天才发现原来是因为这个,现特记录一下,以后碰到了也就更清楚些。

看完简述,如果你已完全了解就可以走了,如果也是不太懂可以看看,如果有不对的地方还可以讨论。这也算是开头加上个简述的作用,就是已经了解的人不必重复花时间看了。

toString()方法

先看API 中关于 toString()的描述:

返回该对象的字符串表示。通常,toString 方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂的信息表达式。建议所有子类都重写此方法。

Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:

getClass().getName() + '@' + Integer.toHexString(hashCode())

toString()方法返回的是这个对象的字符串表示,就像是这个对象的名字一样,任何对象都可以有自己的名字,你可以重写其toString()方法,给其赋予任意的名字。

但是调用toString()方法的对象不能为 null,否则会抛出异常:java.lang.NullPointerException。

String.valueOf()方法

上边提到,调用toString()方法的对象不能是null,但接下来这个 String.valueOf()方法却不管这些,其实这个方法也是调用了toString()方法,只不过在调用之前做了点处理,我们来看一下源码:

/*** Returns the string representation of the Object argument.

*

*@paramobj an Object.

*@returnif the argument is null, then a string equal to

* "null"; otherwise, the value of

* obj.toString() is returned.

*@seejava.lang.Object#toString()*/

public staticString valueOf(Object obj) {return (obj == null) ? "null": obj.toString();

}

不看注释,直接看代码也知道,这个方法就是在调用 toString() 之前判断一下这个对象是不是null,如果不是null,则正常调用其toString()方法,如果是null 的话,则返回字符串形式的null。

String.valueOf() 比起直接用 toString() 来说虽然可能会减少报错的机会,但是如果在对比对象值的时候可要小心,要注意如果用if(String.valueOf(object)==null) 就肯定不行的了。

强制转换 (String)data

这个是初学者最容易出错的,其实每个对象的类型在对象创建的时候已经确定并且不能更改,所谓强制转换也只是使其表面上换成了另一种类型,可以使用其方法对这个对象进行处理。那么可想而知,把物品A 当成物品B 来使用,当A 能能够被当成 B的时候大家都相安无事,你走你的路,我过我的桥,一旦A 不能被当成B ,它不会去自动调用 toString()方法,而是马上就会报错。

例一:

Integer obj1 = new Integer(100);

String strVal= (String)obj1;  //Cannot cast from Integer to String

因为obj1 在创建的时候就是 Integer 类型,不能转换成 String 类型,所以在编译期间就会报错Cannot cast from Integer to String。

例二:

Object obj2 = new Integer(100);

String strVal= (String)obj2;

obj2 虽然本质上是 Integer 类型,但其表面上确是 Object 类型,所以在编译的时候没有报错,但因为 obj2 在创建的时候已经确定了其在本质上 Integer 类型,所以这两行代码在运行时依然会报错,因为 Integer 型不能转换成 String 类型。

当然,如果要把 Integer 型转换成 String,可以调用其 toString()方法:Integer.toString(obj1) 或者 String.valueOf(obj1); 对应于其他自定义类型,则调用自己重写的 toString() 方法。

此外,因null值可以被强制转换为任何类型,所以(String)null也是合法的。

参考资料

java强制转换为string_toString() 和 强制类型转换 (String)相关推荐

  1. java 强制转换string_toString() 和 强制类型转换 (String)

    转自https://www.cnblogs.com/yuxiaoqi/p/3562161.html 简述 在Java中,往往需要把一个类型的变量转换成String 类型.作为菜鸟,有时候我会使用(St ...

  2. toString() 和 强制类型转换 (String)

    简述 在Java中,往往需要把一个类型的变量转换成String 类型.作为菜鸟,有时候我会使用(String) data,有时候就使用data.toString(),如果不行还会试试 String.v ...

  3. JavaScript 强制类型转换(String)

    一.强制类型转换简介 指将一个数据类型强制转换为其他的数据类型 类型转换主要指,将其他的数据类型,转换为 String.Number.Boolean 二.强制类型转换----String 1.将其他的 ...

  4. JavaScript基础02【强制类型转换(String Number Boolean) 其它进制数】

    学习地址: 谷粒学院---尚硅谷 尚硅谷最新版JavaScript基础全套教程完整版(140集实战教学,JS从入门到精通) JavaScript基础.高级学习笔记汇总表[尚硅谷最新版JavaScrip ...

  5. char强制类型转换为int_为强制类型转换正名

    为强制类型转换正名​www.yexiaochen.com 引子 强制类型转换是JavaScript开发人员最头疼的问题之一, 它常被诟病为语言设计上的一个缺陷, 太危险, 应该束之高阁. 作为开发人员 ...

  6. Java中父类强制转换为子类的可能

    之前徒弟问了一个问题, 在Java中, 父类对象到底能不能转换成对应的子类对象? 到底能不能, 今天就来说说这个问题, 先看下面一段代码: package cn.com.hanbinit.test; ...

  7. Js强制类型转换——String类型 / Number类型/Boolean类型

    String类型 / Number类型 强制类型转换---String 强制类型转换---Number 强制类型转换---Boolean JS有六种数据类型,其中前五为基本数据类型: 类型 名称 St ...

  8. java 父类强制转换为子类_父类强制转换为子类

    java的强制类型转换 强制类型转换,又叫造型.分为基本数据类型和引用数据类型两种情况,这里探讨后者,即引用类型的强制类型转换. 对于引用类型来说,什么是强制类型转换呢?简单地说,就是把父类型转换为子 ...

  9. java View转换类型_java强制类型转换.

    android training中的bitmap讲解中有这么一段代码 static class AsyncDrawable extends BitmapDrawable { private final ...

最新文章

  1. java excel md5,excel表格数据md5加密-excel 怎么把文本转化成md5
  2. vs2008中如何在项目属性中切换“图形形式”和“控制台形式”——即调出或消除黑窗口
  3. Host key verification failed.
  4. StringBuilder的toString方法
  5. 从Ecipse中导出程序至apk
  6. epoll反应堆模型代码
  7. 下载ueditor-1.1.3.jar源码和源代码
  8. Memcache的分布式应用
  9. spark学习-Spark性能调优(1)
  10. c语言 由函数组成的数组,学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun(),它的_考题宝...
  11. python实现切割url得到域名、协议、主机名等各个字段
  12. DayDayUp:计算机技术与软件专业技术资格证书之《系统集成项目管理工程师》证书考试历年真题及其解析之2021年/2022年
  13. 视频教程-QT/C++从新手到老手系列之QT基础篇-其他
  14. 锁定计算机注册表,如何禁用注册表?Win7注册表锁定bat制作方法
  15. uniapp 金额输入框
  16. 网易2018实习生招聘笔试题的收获
  17. 《CAT NAUGHTY CARP》App Store 隱私政策網址(URL)
  18. Spherical harmonics 和 cubemap 的关系
  19. csgo国服文件转国际服务器,CSGO国服怎样转国际服 1个打开项搞定
  20. 7-46 新浪微博热门话题(字符串)

热门文章

  1. RD算法及其距离徙动校正(原理及matlab仿真)
  2. 京东运维开发工程师 2019校招卷总结
  3. 杜克大学计算机专业本科入学条件,杜克大学本科申请条件有哪些?
  4. SpringBoot思维导图(知识点总结)
  5. 软件自动化测试平台设计,软件自动测试平台的设计与实现
  6. uni-app、H5+ 仿IOS 实现 安卓手势拖拽右滑关闭当前页面并返回上级页面 + 阴影效果(侧滑返回)
  7. ios企业版如果证书过期了_iOS 企业证书过期填坑记
  8. 复盘2020年全球科技行业:5G建设加速、半导体行业洗牌、云计算爆发 | TMT观察...
  9. 将两个有序数组合并成一个有序数组
  10. python画函数图像网格_用python 画一个网格