zoukankan      html  css  js  c++  java
  • Java中如何正确的将byte[]数组转化为String类型?

       很多人在编程时,总是喜欢用一下方法将数组转为字符串:(a为byte数组)

        String s=a.toString();

    可是每次返回的时候,新手看来返回的结果是乱码,比如说我,写RSA算法时,没有注意,就以为是解密出来的乱码(哈哈哈),但其实[B@1b6d3586 为@+hash值,这个时候要知道对于返回一个String对象,new一个是基本上不会错的,测试代码如下:

    1         Scanner scan=new Scanner(System.in);
    2         String s="ghhhh";
    3         byte[]a=s.getBytes();
    4         String s1=a.toString();
    5         String s2=new String(a);
    6         System.out.println("s1:"+s1);
    7         System.out.println("s2:"+s2);            

    测试结果:

    1 s1:[B@1b6d3586
    2 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方法返回一个字符串,该字符串由对象为实例的类的名称、符号符号符号“@”和对象哈希代码的无符号十六进制表示组成。换句话说,此方法返回一个字符串。

      因此,下次不要用错方法咯!

    由于无法解释的神圣旨意,我们徒然地到处找你;你就是孤独,你就是神秘,比恒河或者日落还要遥远。。。。。。
  • 相关阅读:
    SAP S/4HANA extensibility扩展原理介绍
    SAP CRM系统订单模型的设计与实现
    使用nodejs代码在SAP C4C里创建Individual customer
    SAP Cloud for Customer Account和individual customer的区别
    Let the Balloon Rise map一个数组
    How Many Tables 简单并查集
    Heap Operations 优先队列
    Arpa’s obvious problem and Mehrdad’s terrible solution 思维
    Passing the Message 单调栈两次
    The Suspects 并查集
  • 原文地址:https://www.cnblogs.com/momoli/p/10188601.html
Copyright © 2011-2022 走看看