Java中如何正确的将byte[]数组转化为String类型?
很多人在编程时,总是喜欢用一下方法将数组转为字符串:(a为byte数组)
String s=a.toString();
可是每次返回的时候,新手看来返回的结果是乱码,比如说我,写RSA算法时,没有注意,就以为是解密出来的乱码(哈哈哈),但其实[B@1b6d3586 为@+hash值,这个时候要知道对于返回一个String对象,new一个是基本上不会错的,测试代码如下:
Scanner scan=new Scanner(System.in);
String s="ghhhh";
byte[]a=s.getBytes();
String s1=a.toString();
String s2=new String(a);
System.out.println("s1:"+s1);
System.out.println("s2:"+s2);
测试结果:
s1:[B@1b6d3586
s2:ghhhh
可以看到s1所对应的方法只是返回hash值,而s2才真正返回了a的实体值。
这是因为,String java.lang.Object.toString()返回的确实是hash值,介绍如下:
Returns a string representation of the object. In general, the toString
method returns a string that "textually represents" this object. The result should be a concise but informative representation that is easy for a person to read. It is recommended that all subclasses override this method.
The toString
method for class Object
returns a string consisting of the name of the class of which the object is an instance, the at-sign character `@
', and the unsigned hexadecimal representation of the hash code of the object. In other words, this method returns a string equal to the value of:
getClass().getName() + '@' + Integer.toHexString(hashCode())
大体意思就是类Object的toString方法返回一个字符串,该字符串由对象为实例的类的名称、符号符号符号“@”和对象哈希代码的无符号十六进制表示组成。换句话说,此方法返回一个字符串。
因此,下次不要用错方法咯!
最新文章
- 在eclipse中把Tomcat 8删掉不能重建问题,启动Tomcat重置本地配置问题
- Oracle 分区表的新增、修改、删除、合并。普通表转分区表方法
- C#实现鸽巢排序
- android:shape
- lucene索引文件格式
- UIView的frame的扩展分类,轻松取出x、y、height、width等值
- 第二百六十六天 how can I 坚持
- Socket异步通信学习三
- js 去除字符串开头或者前几个字符。slice 也可以用于截取某一部分
- 【转】通过Navicat for MySQL远程连接的时候报错mysql 1130的解决方法
- list转换为map
- 蓝桥网试题 java 基础练习 数列特征
- Windows安装mysql-python提示:error: Microsoft Visual C++ 9.0 is required
- C#多线程中的异常处理
- java获取本机ip(排除虚拟机等一些ip)最终解,总算找到方法了
- Pandas透视表(pivot_table)详解
- 可远程定位、解锁并启动汽车的黑客设备OwnStar
- 根据C#编程经验思考编程核心
- leetcode第一刷_ Flatten Binary Tree to Linked List
- Java并发(零)教程目录