java 字符数组使用toString变为乱码的原因(其实不是乱码)
2022/1/24 1:04:36
本文主要是介绍java 字符数组使用toString变为乱码的原因(其实不是乱码),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
java 字符数组使用toString变为乱码(其实是地址)
我在网上搜了一下这个小白容易犯的问题并没有人解答过
因为String字符串可以通过toCharArray()得到字符数组,所以很多初学者就会想到对字符数组使用toString()的方法得到字符串
String name="name"; char[] a=name.toCharArray(); String str=a.toString(); System.out.print(str);
比如这段代码,像我一样的初学者想在这里对字符数组使用toString()得到字符串再print出去
表面上看去这很正确是吧,
但把代码运行一下就发现打印的是 [C@6a1aab78 这是 类名+@+地址
通过调试我们发现toString的代码是这样的
这段代码简单来说
就是返回了这个类名+@+这个变量的地址值
这是所有Object类的toString方法 ,而所有的类都是继承于Object类的,所以只要一个类他不去重写他自身的toString 方法的话调用同String都会得到 类名+@+地址值的形式。
所以这里不能直接使用toString方法将字符数组转换为字符串。
那么怎么将字符数组转换为字符串呢?
(1)直接在构造String时转换
String name="name"; char[] a=name.toCharArray(); String str = new String(a);//利用String类的构造函数来转换 System.out.print(str);//此时输出的就是name了
(2)调用String类的提供的方法的valueOf()
String name="name"; char[] a=name.toCharArray(); String str = String.valueOf(a);//调用String类的提供的方法的valueOf() System.out.print(str);//此时输出的就是name了
(3)笨笨的用循环遍历
String name="name"; char[] a=name.toCharArray(); String str = ""; for(int i =0;i<a.lenth;i++) { str+=a[i]; } System.out.print(str);//此时输出的就是name了
这个地方的String其实可以改为BufferString,这样能提高性能,因为字符串是不可变的,每改动一次其实都是生成了一个新的字符串,浪费资源。而BufferString不会。
最后我要说一下如果你只是想要在print中输出这个字符数组的内容的话可以写成这样
String name="name"; char[] a=name.toCharArray(); System.out.print(a);//此时输出的就是name了
这是为什么呢?通过debug得知在print中如果你的这个变量是给数组或者是map,list,set等等集合的话,它会把其中每一个元素都调用toString方法 ,即System.out.print("n"+"a"+"m"+"e");
这篇关于java 字符数组使用toString变为乱码的原因(其实不是乱码)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-19TypeScript进阶:从入门到实践
- 2024-10-19Drizzle ORM教程:轻松入门与实践指南
- 2024-10-19Drizzle ORM教程:从入门到简单应用
- 2024-10-19OAuth接入教程:新手入门指南
- 2024-10-19公共API教程:新手入门指南
- 2024-10-19Server Action教程:一步步入门指南
- 2024-10-19Server Component教程:新手入门指南
- 2024-10-19TRPC教程:新手入门与基础使用指南
- 2024-10-19Uppy教程:快速入门与实践指南
- 2024-10-19uppy教程:轻松入门指南