toString()、String.valueOf、(String)强转,有啥区别?

news2024/11/24 1:10:21

@TOC
首先我们看这三头货,什么toString()、String.valueOf、(String)强转?有啥区别?就问你是不是很像,是不是都有一个String?
说白了,这三个都是将XX给变成String,简称变身String的方法

接下来一个一个的分析下!

toString()

这个方法真正做到那种见名知意,也就是看到这个名字,我就知道它是干嘛的,所以平常咱们在命名的时候也要注意,你起的名字要有意义,看到这个名字我知道这个东西有什么用~
接着来看我们的toString,这玩意怎么用?
Integer a = 666;
a.toString();
我们应该比较熟悉这种,就是在一些JavaBean中也就是我们的实体类或者pojo中:
在这里插入图片描述
这里的toString其实是重写了Objec类中的toString:
![在这里插入图片描述](https://img-blog.csdnimg.cn/147a7e5a4a254a268f599642fdf904cf.png
也即是说,如果你自己定义一个类,使用toString的话,那就是直接调用Objec类中的该方法了,但是一般我们都会重写该方法,比如integer这个包装类中:
在这里插入图片描述
发现这里的toString就与Objec中的不一样,进行了重写,我们可以这样使用:
Integer a = 666;
String b = a.toString();
因为在Object中含有toString方法,又因为Object是所有类的父类,因此,所有的引用类型都可以使用toString方法,只不过大部分派生类都会重写该方法!
在Java中,数据分为基本数据类型和引用数据类型,而基本类型是无法使用toString方法的:
在这里插入图片描述
不过在使用toString的时候我们要注意一下null值的问题:
在这里插入图片描述
比如这样的情况,编译是没问题的,但是运行就报错了:
在这里插入图片描述
所以这里一定要注意,不然就掉坑了!
那对于toString这个方法,所有的引用类型都可以使用,大部分派生类会重写,使用要注意null问题,不然就会遇到空指针异常!

鉴于大部分人都是不认真的,所以一般就不推荐使用该方法了,但是如果有些情况使用toString性价比更高的话,那就用呗,做人,不能太死板了!

String.valueOf()

该方法属于String中的一个静态方法,使用起来相对来说会方便点,嗯,是这么回事:
在这里插入图片描述
而且我们发现,对于基本类型,这个方法也是可以进行String的转变的,我们可以看下它的源码:
在这里插入图片描述
发现没有,当我们传入的是一个基本类型的时候,实际上最终还是调用的toString:
在这里插入图片描述
我们发现在String当中这是一个重载函数,而且其中一个可以传入Object作为参数,这说明啥?
也就意味着,啥玩意都可以往里面放,都可以帮助你转变成String,我们试下:
在这里插入图片描述
输出结果:
在这里插入图片描述
再看下null值问题:
在这里插入图片描述
输出结果:
在这里插入图片描述
发现没有,并没有给你报错,而是给你返回了一个字符串“null”,看源码:
在这里插入图片描述
原来这里是做了判空处理的,这个要比直接调用toString更加的安全了!
总结来说,就是String.valueOf()方法不仅可以用于引用类型,也可以用于基本类型(实际调用的是其包装类),不放实际上都是调用了toString方法,不过在以Object为参数的方法中增加了盼空处理,避免了空指针异常!
所以,一句话:

String.valueOf()方法比toString()方法好用,推荐

(String)强转

对于这种强转形式,大家应该对基本类型的强制转换比较熟悉,见的也比较多,其实吧,在基本类型中进行强制转换还可以……
但是吧,这个字符串强转真不咋地,也不怎么推荐使用,你看:
在这里插入图片描述
表面来看,想基本类型和引用类型都是无法进行强转的,不过对于Object类型在编译的时候并没有什么问题,但是,这可不代表运行无错啊:
在这里插入图片描述
发现会报一个类型转换错误,也就是无法转换,不过对于null值问题:
在这里插入图片描述
发现这个对于null是可以强转的,一般在使用这个强转的时候,我们可以这样:
在这里插入图片描述
看下结果:
在这里插入图片描述
是不是更加友好,避免报错,所以在使用强转的时候,我们可以使用instanceof来进行类型检查,得到一个更加友好的提示!
不过,一般来说,还是不太推荐使用强转,就冲这名字,它就不太靠谱,你觉得呢?
在这里插入图片描述
运行也是没错的:
在这里插入图片描述
这种方式用过吗?
其实这种方式就相当于字符串直接拼接,对于这种形式我们可以反编译一个代码看看:
在这里插入图片描述
其实也就是先创建一个StringBuilder,然后通过append的方式拼接两个变量,最后在调用toString的方式!
对于这种方式,其实是不太建议的,因为它的效率不太行,也就是不建议直接拼接字符串的!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/189159.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IDEA maven使用详解

前提 确保本地安装了maven 以一个模块工程为例,内部包含了许多maven项目 生命周期 这是全部的生命周期 其中,常用的生命周期的各个功能为: (clean生命周期)mvn clean清理target (default生命周期①)mvn validate验证项目为maven项目&a…

自然语言处理的进阶之路

1、隐马尔可夫链路一般较短原因 连乘链路太长,会导致数据稀疏,零频词太多 2、零频问题的一般解决方案 平滑/回退/差值 当n设置较小时,仍然会存在oov问题(语料中未出现的词) 2.1、平滑 2.1.1、加1平滑/拉普拉斯平…

Maven初级(一)

目录 一. Maven概述 1.1 Maven是什么 1.2 Maven的作用 1.2.1 项目构建 1.2.2 依赖管理 1.2.3 统一项目结构 1.3 Maven模型 1.3.1 插件 1.3.2 项目对象模型 1.3.3 依赖管理模型 二. Maven基础概念 2.1 仓库: 2.2 仓库分类 2.2.2 远程仓库(私服) 中央仓…

Python继承的优缺点

推出继承的初衷是让新手顺利使用只有专家才能设计出来的框架!子类化内置类型的问题在Python2.2之前,内置类型不能子类化,如list、dict等。在Python2.2之后,内置类型可以子类化了,但是要注意的是:内置类型&a…

Individual tree segmentation and tree-counting using supervised clustering

ABSTRACT 个体树木分割 (ITS) 或树木计数是精准林业和农业过程中的一项基础工作。与费时费力的人工检查不同,计算机视觉在基于无人机 (UAV) 的应用中显示出巨大的前景;此类应用之一包括森林资源清单中的自动树木计数问题。然而,由于树冠冠层…

深度学习性能评估指标介绍

首先是相关数据描述。假设原始样本中有两类数据,其中:总共有P个类别为1的样本,假设类别1为正例总共有N个类别为0的样本,假设类别0为负例经过分类后:有TP个类别为1的样本被系统正确判定为类别1,FN个类别为1的…

【哈希表】leetcode1. 两数之和(C/C++/Java/Python/Js)

leetcode1. 两数之和1 题目2 思路3 代码3.1 C版本3.2 C版本3.3 Java版本3.4 Python版本3.5 JavaScript版本4 总结1 题目 题源链接 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数…

iPad 屏幕镜像到 macbook

将iPad 到屏幕投屏到 macbook,只需要三步就可以实现用数据线连接ipad和macbook在macbook的应用中找到QuickTime Player,打开QuickTime Player,在【文件】中选择【新建影片】在弹出窗口的小箭头中,选择需要的iPad名称通过数据线连接…

目标跟踪心得篇七:解决目标跟踪评价指标输出为0或异常(Trackeval、MMtracking)

如果在做跟踪任务测评时,发现输出的评价指标全为0或者异常值时该怎么办(如下图)?博主调试了很久发现其实这是MMtracking的一个Bug,因此如果不是用MMtracking框架的话本节可能对你帮助不大。 大致有以下两个内容: TrackEval目前还不能做到对多类别的MOT任务计算评价指标,…

FDD与TDD

TDD,时分双工(Time Division Duplexing) FDD,频分双工(Frequency Division Duplexing) 帮助理解: 1.FDD:双车道,一个车道只能走一个方向,双向互不干扰。 2.TDD:单车道,不同时间允…

RabbitMQ看这一篇文章就够了

第一章 RabbitMQ介绍 第1节 MQ是什么 1 2 3 41. 消息队列(Message Queue),又叫做消息中间件 2. 用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成 3. 通过提供消息传递和消息队列模型,可以在分布式环境下扩展进程的通信 4. MQ 是用来解…

北斗短报文遥测终端机在水雨情监测系统中的应用

一、方案概述 我国水利监管手段比较单一,水雨情监测移动公网覆盖不足等诸多问题,利用北斗短报文通信技术数字化信息采集技术,实现水文自动测报,大幅度提升湿地生态和水域的监测、查询、预警和应急处理能力。在恶劣天气情况或特殊灾…

360(drizzleDumper)脱壳教程“某药数据”

一、drizzleDumper的下载使用 1.上GitHub下载开源的脱壳工具mirrors / DrizzleRisk / drizzleDumper GitCodedrizzleDumper是一款基于内存搜索的Android脱壳工具。 🚀 Github 镜像仓库 🚀 源项目地址 ⬇ ⬇...https://gitcode.net/mirrors/DrizzleRisk…

ZedGraph如何显示鼠标附近的曲线的点?介绍三种方法

使用ZedGraph绘制曲线图的时候,不仅仅是看曲线的走向,也需要查看曲线上某位位置处采集到的数据是多少。下面介绍三种方法,从简单到复杂。 文章目录1、使用自带的功能显示点的坐标2、 多条曲线的坐标点同时显示3、 多条曲线的坐标点同时显示&a…

100%国产C2000,P2P替代TMS320F280049C,独立32位双核CPU,主频高达400MHz

一、特性参数 1、独立双核,32位CPU,单核主频400MHz 2、IEEE 754 单精度浮点单元 (FPU) 3、三角函数单元 (TMU) 4、1MB 的 FLASH (ECC保护) 5、1MB 的 SRAM (ECC保护&…

docker基础简介

一、docker架构 二、Docker 基本命令 1、查看 Docker 版本 查看 Docker 版本包括 Docker 版本号、API 版本号、对应的 Git Commit、Containerd 和 runC的版本信息等。 # docker version Client: Docker Engine - Community Version: 20.10.4 API version: 1.40 Go version: …

新手小白做跨境电商应该从哪里入手?

想从事跨境电商先从哪里入手?米贸搜整理如下,希望可以帮助到你跨境电商平台,如:Amazon、eBay、aliexpress、Cdiscount、wish等。想从事跨境电商,你得搭建电商团队,先从跨境电商平台的入驻入手,弄清楚入驻条…

【设计模式】行为型模式·模板方法模式

学习汇总入口【23种设计模式】学习汇总(数万字讲解体系思维导图) 一.概述 定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。 在面向对象程序设计过程中,程序员常…

HTB_Inclued_TFTP文件包含与LXD提权

文章目录信息收集TFTPLXD 提权环境安装报错信息收集 开放80端口,url为http://ip:port?filehome.php 测试文件包含,本地包含成功,远程失败,尝试上传后门木马反弹shell 根据图示,网站目录为var/www,其他功…

minio 使用docker安装和入门案例demo

minio目录1.安装2.页面web访问3.在界面上传4.使用api上传5.使用api下载目录 公司目前用到文件上传,考虑到费用等情况,可以在公司自己的服务器上搭建一下。本人记录minio的使用情况。 “前些天发现了一个巨牛的人工智能学习网站,通俗易懂&…