java强制转换为string_toString() 和 强制类型转换 (String)
简述
在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)相关推荐
- java 强制转换string_toString() 和 强制类型转换 (String)
转自https://www.cnblogs.com/yuxiaoqi/p/3562161.html 简述 在Java中,往往需要把一个类型的变量转换成String 类型.作为菜鸟,有时候我会使用(St ...
- toString() 和 强制类型转换 (String)
简述 在Java中,往往需要把一个类型的变量转换成String 类型.作为菜鸟,有时候我会使用(String) data,有时候就使用data.toString(),如果不行还会试试 String.v ...
- JavaScript 强制类型转换(String)
一.强制类型转换简介 指将一个数据类型强制转换为其他的数据类型 类型转换主要指,将其他的数据类型,转换为 String.Number.Boolean 二.强制类型转换----String 1.将其他的 ...
- JavaScript基础02【强制类型转换(String Number Boolean) 其它进制数】
学习地址: 谷粒学院---尚硅谷 尚硅谷最新版JavaScript基础全套教程完整版(140集实战教学,JS从入门到精通) JavaScript基础.高级学习笔记汇总表[尚硅谷最新版JavaScrip ...
- char强制类型转换为int_为强制类型转换正名
为强制类型转换正名www.yexiaochen.com 引子 强制类型转换是JavaScript开发人员最头疼的问题之一, 它常被诟病为语言设计上的一个缺陷, 太危险, 应该束之高阁. 作为开发人员 ...
- Java中父类强制转换为子类的可能
之前徒弟问了一个问题, 在Java中, 父类对象到底能不能转换成对应的子类对象? 到底能不能, 今天就来说说这个问题, 先看下面一段代码: package cn.com.hanbinit.test; ...
- Js强制类型转换——String类型 / Number类型/Boolean类型
String类型 / Number类型 强制类型转换---String 强制类型转换---Number 强制类型转换---Boolean JS有六种数据类型,其中前五为基本数据类型: 类型 名称 St ...
- java 父类强制转换为子类_父类强制转换为子类
java的强制类型转换 强制类型转换,又叫造型.分为基本数据类型和引用数据类型两种情况,这里探讨后者,即引用类型的强制类型转换. 对于引用类型来说,什么是强制类型转换呢?简单地说,就是把父类型转换为子 ...
- java View转换类型_java强制类型转换.
android training中的bitmap讲解中有这么一段代码 static class AsyncDrawable extends BitmapDrawable { private final ...
最新文章
- java excel md5,excel表格数据md5加密-excel 怎么把文本转化成md5
- vs2008中如何在项目属性中切换“图形形式”和“控制台形式”——即调出或消除黑窗口
- Host key verification failed.
- StringBuilder的toString方法
- 从Ecipse中导出程序至apk
- epoll反应堆模型代码
- 下载ueditor-1.1.3.jar源码和源代码
- Memcache的分布式应用
- spark学习-Spark性能调优(1)
- c语言 由函数组成的数组,学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun(),它的_考题宝...
- python实现切割url得到域名、协议、主机名等各个字段
- DayDayUp:计算机技术与软件专业技术资格证书之《系统集成项目管理工程师》证书考试历年真题及其解析之2021年/2022年
- 视频教程-QT/C++从新手到老手系列之QT基础篇-其他
- 锁定计算机注册表,如何禁用注册表?Win7注册表锁定bat制作方法
- uniapp 金额输入框
- 网易2018实习生招聘笔试题的收获
- 《CAT NAUGHTY CARP》App Store 隱私政策網址(URL)
- Spherical harmonics 和 cubemap 的关系
- csgo国服文件转国际服务器,CSGO国服怎样转国际服 1个打开项搞定
- 7-46 新浪微博热门话题(字符串)
热门文章
- RD算法及其距离徙动校正(原理及matlab仿真)
- 京东运维开发工程师 2019校招卷总结
- 杜克大学计算机专业本科入学条件,杜克大学本科申请条件有哪些?
- SpringBoot思维导图(知识点总结)
- 软件自动化测试平台设计,软件自动测试平台的设计与实现
- uni-app、H5+ 仿IOS 实现 安卓手势拖拽右滑关闭当前页面并返回上级页面 + 阴影效果(侧滑返回)
- ios企业版如果证书过期了_iOS 企业证书过期填坑记
- 复盘2020年全球科技行业:5G建设加速、半导体行业洗牌、云计算爆发 | TMT观察...
- 将两个有序数组合并成一个有序数组
- python画函数图像网格_用python 画一个网格