Java getBytes()

时间:2010-04-06 20:09:56

标签: java

你知道为什么我没有得到你好

的问题
byte f []  ="hello".getBytes();

System.out.println(f.toString());

5 个答案:

答案 0 :(得分:11)

由于byte[]#toString()(通常)未实现为new String(byteArray),因此会产生您期望的结果(例如System.out.println(new String(byteArray));

您可能想要this page一眼......

答案 1 :(得分:0)

因为字节数组的toString方法不打印其内容(根本)。而且字节不是字符。为什么你期望看到"hello"?为什么不直接做System.out.println("hello")

答案 2 :(得分:0)

您从System.out.println(f.toString())获得“奇怪”输出的原因是您正在打印数组,而不是字符串。 Java的数组类不会覆盖toString()方法。因此,被调用的toString()方法是来自java.lang.Object的方法,它被定义为输出对象的类名及其标识哈希码。 (在这种情况下,byte[]类的类名将为“[b”。)

我认为您的困惑源于您在心理上将String和字节数组等同。这在概念上是错误的有两个原因:

  • 在Java中,字符串不是任何数组。 String类是一个完全封装的类,除了Object之外,不能转换为其他任何东西。

  • 在Java中,String模拟一系列字符,而不是字节序列。

后者是一个关键的区别,因为字符序列和字节之间有许多可能的转换,其中许多在一个或两个方向上都是有损的。当您致电"hello".getBytes()时,您会获得平台默认字符编码隐含的转化,但您可以向getBytes提供参数,以便在转化中使用不同的编码。

答案 3 :(得分:0)

由于f不是stringtoString()类的object方法被调用而不是String类。 toString类的String会返回String toStringobject类返回:

getClass().getName() + '@' + Integer.toHexString(hashCode()) ..... aww aww不要走得太远......同样如下: 哈希码的classname.@hexadecimal代码

答案 4 :(得分:-2)

如果不提供编码方法,则无法在字节数组和字符串之间进行转换。

尝试System.out.println(new String(f, "UTF8"));