你知道为什么我没有得到你好
的问题byte f [] ="hello".getBytes();
System.out.println(f.toString());
答案 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
不是string
,toString()
类的object
方法被调用而不是String
类。
toString
类的String
会返回String
toString
个object
类返回:
getClass().getName() + '@' + Integer.toHexString(hashCode())
..... aww aww不要走得太远......同样如下:
哈希码的classname.@hexadecimal
代码
答案 4 :(得分:-2)
如果不提供编码方法,则无法在字节数组和字符串之间进行转换。
尝试System.out.println(new String(f, "UTF8"));