当我在Java中运行以下代码时,我得到输出:[B@1ddcac5
Java代码
byte[] byteA = "test".getBytes("UTF-8");
System.out.println(String.valueOf(byteA));
如果我尝试在C#中运行类似的代码,我只会得到:System.Byte[]
C#代码
Console.WriteLine(Encoding.UTF8.GetBytes("test"));
如何在C#中获得与在Java中相同的输出?
由于
答案 0 :(得分:6)
您应该首先修复Java程序:
byte[] byteA = "test".getBytes("UTF-8");
System.out.println(Arrays.toString(byteA));
现在用C#打印你的数组 - 两个输出开始相互匹配:
byte[] byteA = Encoding.UTF8.GetBytes("test");
for (int i = 0 ; i != byteA.Length ; i++) {
Console.Write("{0} ", byteA[i]);
}
答案 1 :(得分:4)
这是相同的输出。只有java打印对象的默认类型和内存地址。在C#中,只打印类型。
输出[B@1ddcac5
与其内容无关,[B
指定对象是字节数组(因此相当于System.Byte[]
),Java也打印标识hash,在这种情况下是1ddcac5
(它由对象的存储位置决定,所以如果你第二次运行你的程序,哈希就会改变)。您可以而只是打印:
Console.WriteLine("[B@1ddcac5");
但当然语义不一样。
答案 2 :(得分:4)
你不能因为 [B @ 1ddcac5 是由Java创建的类<strong>实例标识符(类似于内存地址)。如果多次运行代码,输出应该会改变。