CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2EE / EJB / JMS

[请教]byte[]与字符串转换的问题

楼主smalldeer(晓露)2005-04-04 10:46:39 在 Java / J2EE / EJB / JMS 提问

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

相关问题

  • 有关字符串与BYTE串互相转换的问题
  • [请教]byte[]与字符串转换的问题
  • 字符串怎么转换为byte
  • 整数与字符串的转换
  • 字符串与字符间的转换
  • 字符串提取与数据转换
  • Help me: COM BSTR 字符串与wchar_t*字符串能相互转换吗?
  • 字符串转换
  • 字符串转换
  • 字符串转换

关键词

  • byte
  • getbytes
  • str

得分解答快速导航

  • 帖主:smalldeer
  • jFresH_MaN
  • honkiko
  • jFresH_MaN
  • honkiko

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo