[请教]byte[]与字符串转换的问题 对不起,说错了,打印的是这两个数组的hash码.@符前的[B表示这是一个 byte数组. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你打印出来的是两个byte数组内存地址,当然是不一样的。 System.out.println("byte1<<<" + byte1);System.out.println("byte2<<<" + byte2);是byte数组内存地址 当然不同了;楼主看看这个结果就知道了吧 for(int i =0 ; i<byte1.length;i++){ System.out.println(byte1[i]); } for(int i =0 ; i<byte2.length;i++){ System.out.println(byte2[i]); } 但作为一种典型的虚拟机实现,这个hash code一般也就是这个对象的内存地址. byte1<<<[B@192d342输出的是数组对象的toString(其实和散列函数有关)当然不可能相等。你就算是夏面的程序也是不同值的 String[] str1 = new String[0]; String[] str2 = new String[0]; System.out.println(str1); System.out.println(str2); System.out.println("str2<<<" + str2);打印的是toString(其实是和hashcode有关,注意:有些人说这是内存地址,这不是内存地址!!!这个函数是为了实现对象作为字典数据类型的键用的。她其实返回的是 类名@无符号十六进制的hashcode)这里两个数组对象虽然内容一样,但是数组对象是俩个对象,各有各的hashCode,所以各有各的toString()结果。 >>你打印出来的是两个byte数组内存地址,当然是不一样的。>>System.out.println("byte2<<<" + byte2);>>是byte数组内存地址 当然不同了;>>你打印出来的是两个byte数组内存地址,当然是不一样的。纠正一下,这个和内存没关系,数组对象的toString()默认实现是返回类名@hashcode的十六进制表示 public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); } 在Object类的hashCode方法说明中,有下面一段话.(This is typically implemented by converting the internal address of the object into an integer, but this implementation technique is not required by the JavaTM programming language.) 指向的是两个byte对象的引用地址,结果就不同了;但两对象里存的值还是一样的 楼主关心的也许是这个问题,两个String对象str1与str2其实是同一个对象,可是从他们得到的byte[]确不一样。这与String.getBytes()方法的实现方式有关。String.getBytes()里面每次都是调用了net byte[]重新构造了一个新的数组,所以,即使是对str1调用两次getBytes()方法,返回的数组都是不同的(不同的两个对象,地址不同)。当然数组的内容是相同的。 其实,两个byte[]的内容是一样的只不过你输出的是对象,会默认用其toString()方法,正如DanielYWoo(绿色毒汁)所说!! 又加深了对String的理解 问题提得好 jdk API内部是如何实现的 高分求Ireport打印PDF中文字字体粗体斜体问题。 通过以下程序显示计算机上的串口,为什么检查不到呢。 怎样使画的一张图片不用组件响应事件? 这个问题如何实现?怎样写代码!java java的处理ip的包 最后一问!希望能圆满结束 ◆发生了奇怪的问题∶怎么Tomcat自带的例子程序有的可以运行,有的却不能。(前天还都是好的)◆ 运行jar的时候如何调用另一个jar包的函数? JBuilder6中怎么调用右键菜单? 怎么么实现洗牌算法啊?? 问一个awt的基础问题
System.out.println("byte2<<<" + byte2);
是byte数组内存地址 当然不同了;
楼主看看这个结果就知道了吧 for(int i =0 ; i<byte1.length;i++){
System.out.println(byte1[i]);
}
for(int i =0 ; i<byte2.length;i++){
System.out.println(byte2[i]);
}
当然不可能相等。你就算是夏面的程序也是不同值的
String[] str1 = new String[0];
String[] str2 = new String[0];
System.out.println(str1);
System.out.println(str2);
>>是byte数组内存地址 当然不同了;>>你打印出来的是两个byte数组内存地址,当然是不一样的。纠正一下,这个和内存没关系,数组对象的toString()默认实现是返回类名@hashcode的十六进制表示
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
(This is typically implemented by converting the internal address of the object into an integer, but this implementation technique is not required by the JavaTM programming language.)
但两对象里存的值还是一样的
这与String.getBytes()方法的实现方式有关。
String.getBytes()里面每次都是调用了net byte[]重新构造了一个新的数组,所以,即使是对str1调用两次getBytes()方法,返回的数组都是不同的(不同的两个对象,地址不同)。当然数组的内容是相同的。
只不过你输出的是对象,会默认用其toString()方法,正如DanielYWoo(绿色毒汁)所说!!