[请教]byte[]与字符串转换的问题
String str = "String";
byte[] byte1 = str.getBytes();
String str1 = new String(byte1);
byte[] byte2 = str1.getBytes();
String str2 = new String(byte2);
System.out.println("str<<<" + str);
System.out.println("byte1<<<" + byte1);
System.out.println("str1<<<" + str1);
System.out.println("byte2<<<" + byte2);
System.out.println("str2<<<" + str2);
-------------------------------------
输出结果
str<<<String
byte1<<<[B@192d342
str1<<<String
byte2<<<[B@6b97fd
str2<<<String
想请教为什么两个byte输出的不一样呢?
问题点数:100、回复次数:10Top
1 楼jFresH_MaN(十一月的萧邦-夜曲)回复于 2005-04-04 10:55:55 得分 40
String str = "String";
byte[] byte1 = str.getBytes();
String str1 = new String(byte1);
byte[] byte2 = str1.getBytes();
----------
注意byte1是str得到的byte数组,而byte2是另一个字符串str1得到的数组
他们本身也是两个对象
直接打印实际上调用的是toString()方法,而toString()的默认实现是打印对象类型+hashCode()
[B表示byte数组
@表示之后的是地址
后面跟着的是hashCode,其实就是其虚拟机地址
所以这个结果也就是顺理成章了Top
2 楼smalldeer(晓露)回复于 2005-04-04 11:01:39 得分 0
谢谢指教Top
3 楼shenhai800(深海)回复于 2005-04-04 12:00:29 得分 0
正解还不给人家分!!!Top
4 楼jimaojian(没有钱,没有房,没有车,没有女人,我只有一台笔记本,可怜的IT人)回复于 2005-04-04 12:09:22 得分 0
正解还不给人家分!!!Top
5 楼honkiko(honky)回复于 2005-04-04 12:15:37 得分 20
楼主关心的也许是这个问题,两个String对象str1与str2其实是同一个对象,可是从他们得到的byte[]确不一样。
这与String.getBytes()方法的实现方式有关。
String.getBytes()里面每次都是调用了net byte[]重新构造了一个新的数组,所以,即使是对str1调用两次getBytes()方法,返回的数组都是不同的(不同的两个对象,地址不同)。当然数组的内容是相同的。Top
6 楼jFresH_MaN(十一月的萧邦-夜曲)回复于 2005-04-04 12:17:04 得分 20
更正楼上的说法
str1和str2其实是两个不同的对象
只是他们引用的是堆里的同一个常量Top
7 楼honkiko(honky)回复于 2005-04-04 12:47:35 得分 20
什么是对象? 对象是真正存在于堆里,包括它自己所有数据字段的那部分。String str1;定义的是一个对象的引用。 你弄混淆了。你的话应该改为:str1和str2其实是两个不同的对象引用,
只是他们引用的是堆里的同一个对象。
你说"String"这个字符串常量是不是对象?Top
8 楼jianghuxing(回头看看原来我一无所有)回复于 2005-04-04 12:48:42 得分 0
呵呵,说的是呀, TM 常在呀。Top
9 楼huangdeji(活着就是等死)回复于 2005-04-04 12:51:38 得分 0
你打印的是内存地址Top
10 楼dakuntk(2008wo26)回复于 2005-04-04 15:13:38 得分 0
解贴~~解贴~~楼上的都说了,乱up下!Top




