手写String.valueOf(),String和toString

本文探讨了Java中String类型的转换方法,包括String.valueOf()、toString()和强制类型转换的区别与应用场景。解析了ClassCastException、NullPointerException及null与null的处理差异,强调了String.valueOf()在对象转换为字符串时的优势。

String强转,String.valueOf()和toString都能达到将一个类型转化为String类型,或者说,获取到String类型的值;

 

        String suc = "6666";
        String valueStr = String.valueOf(suc);
        String toStr = suc.toString();
        String strStr = (String)suc;

都可以达到目的..这是同,其异的地方在哪里呢....

String强转

之 ClassCastException

既然是强转,肯定是具有继承关系之间的强转及基础数据类型那几个之间的转换.(或者不成立,父类对象指向子类对象的引用)

但是一点,如果强转的类型不一致,就会出现如下问题:

 

toString()方法

之NullPointerException

toString的好处之一更多的是,我们在实体对象中重写toString()方法,以更直观的展示对象之间的属性名称及属性值.

但是,toString(),即使是重写的时候,也是对应当前对象是否存在,即null类型的判断

 

String.valueOf()

之null与"null"的恒等;

String.valueOf()使用的地方是比上述的方法要强大了....该方法返回的就是一个String,而内部是实现了toString的方法,即:

首先一点,避免了toString的空指针问题...同样,由于该方法对所有的object都实现了获取其String类型的值,故也不存在classCast的问题;即使这样他也不是万能的;

即使我将intA改为String 类型....String会将一个null值转化为值null;同样的"null"值也是的...

这样是有一丁点儿歧义的...

 

总结:

其实String.valueOf()的不同只是个人的吹毛求疵,这种业务场景还是很少见的...所以有时候还要多加思考一下.

public void CreateFileAndUpload(JObject requestJson, bool isUploadFile) { try { string uploadFilePath = ""; // 生成上传结果文件 CreateUploadFileInfo(requestJson, out uploadFilePath); if (!isUploadFile) { return; } if (uploadFilePath.Trim() == string.Empty) { log.Error(string.Format("uploadFilePath is emmpty")); return; } // 执行上传 DirectoryInfo dir = new DirectoryInfo(uploadFilePath); FileSystemInfo[] fileinfo = dir.GetFileSystemInfos(); //获取目录下(不包含子目录)的文件子目录 string uploadResult = ""; string csvPath = ""; string[] zipPath = new string[] { }; List<DataTable> csvTable = Enumerable.Repeat<DataTable>(null, 4).ToList(); foreach (FileSystemInfo file in fileinfo) { if (file is DirectoryInfo) //判断是否文件夹 { continue; } // 是文件执行上传 string fullPath = file.FullName; if (file.FullName.Contains(".qdf.csv")) { csvTable[0]= (ConvertCsvToDataTable(fullPath)); // .qdf.csv转换DataTable } if(file.FullName.Contains("_R_tilt_corrected.csv")) { csvTable[1] = ConvertCsvToDataTable(fullPath); } if (file.FullName.Contains("_G_tilt_corrected.csv")) { csvTable[2] = ConvertCsvToDataTable(fullPath); } if (file.FullName.Contains("_B_tilt_corrected.csv")) { csvTable[3] = ConvertCsvToDataTable(fullPath); } if (file.FullName.Contains(".zip")) { zipPath = new[] { fullPath }; } } // post上传数据&文件 JObject UpLoadQdfAndZIPObject = new JObject(); string mesResult = MesRequestHelper.UploadQdfAndZIP(zipPath, csvPath, csvTable, SystemConfig.MachineID, Use.ToClient.ToString(), SystemConfig.OrderID, SystemConfig.model, ProcessCode_RockyP1.BBModule_MTF_Test.ToString()); log.Info(string.Format("UploadQdfAndZIP mes返回的消息:{0}", mesResult)); UpLoadQdfAndZIPObject = JObject.Parse(mesResult); bool status = false; string msg = ""; if (UpLoadQdfAndZIPObject.Property("status") != null) { status = UpLoadQdfAndZIPObject["status"].Value<bool>(); } if (UpLoadQdfAndZIPObject.Property("msg") != null) { msg = UpLoadQdfAndZIPObject["msg"].ToString(); } if(status) // 通知机台后台服务 { bool result = BackendService(); log.Info(string.Format("通知机台后台服务结果:{0}", result)); } } catch (Exception ex) { log.Error(string.Format("UploadTestResult result:{0}, failed:{1}", requestJson.ToString(), ex.Message)); } } 这个函数为啥会捕捉到输入数组长度大于此表中的列数
06-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值