黑马程序员技术交流社区
标题:
输出的为什么不是1234呢?
[打印本页]
作者:
Cola
时间:
2013-11-26 20:57
标题:
输出的为什么不是1234呢?
byte[] by={1,2,3,4};
String s1=new String(by);
sop(s1);
复制代码
结果如图,是一些表情符号,请问为什么呢?
wenti3.JPG
(1.65 KB, 下载次数: 31)
下载附件
2013-11-26 20:56 上传
结果
作者:
HAnG
时间:
2013-11-26 21:00
本帖最后由 HAnG 于 2013-11-26 21:04 编辑
因为
byte[] by={1,2,3,4};
String s1=new String(by);
是把数组传给s1,每一个数组元素对应一个字符,而不是s1="1234",可以看下String类的构造方法。
作者:
RuntimeError!
时间:
2013-11-26 21:05
楼上说的不对
问题在于by的数据类型,by为字节型,属于数字,而string的时候转换成了字符型,就相当于按照ascii码编码转换了过去,显示的是字符串 ,是ascii=1 2 3 4的四个东西。。应该是小图案~
作者:
默狼
时间:
2013-11-26 21:18
你在String s1 = new String(by);的时候相当于对by做了一次类型转换,因此不是1,2,3,4.
作者:
freehiker
时间:
2013-11-26 21:29
因为是byte数组,1通过ascii编码得到的就是你那些字符,你看一下ascii编码表就知道了。
若是 char数组,那你就会得到1234
作者:
Cway㊣
时间:
2013-11-26 21:32
本帖最后由 Cway㊣ 于 2013-11-26 21:34 编辑
String(byte[] bytes)
通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。
byte[] b={1,2,3,4} 他们对应的字符集(ASCII码)就是那几个图案
作者:
还不到时候
时间:
2013-11-26 21:38
new String(by)这是解码,将by数组中每个字节参考ASCII码表中进行查表,1查的是0000-0001对应的字符,2查的是0000-0010对应的字符,3查的是0000-0011对应的字符,4查的是0000-0100对应的字符。将这些字符组成一个字符串输出到控制台就是你看到的结果,至于为什么是那些字符,可以查看下ASCII码表。
如果byte[] by = {49,50,51,52}; 输出的结果就是1234
byte型的数组中每个元素都是一个字节,也就是8个bit位的二进制数。我们看到是个它的十进制数。
作者:
胡建伟
时间:
2013-11-26 21:44
注意这并非乱码,而是数组的内存地址空间,是由哈希算法计算得来,这几个符号就是哈希值
作者:
张天昊76
时间:
2013-11-26 22:00
这么给你解释吧:
byte[] by={1,2,3,4};它定义了一个数组,有4个byte型数据,并把数组地址指向了by,地址是个十六进制的数。
String s1=new String(by);通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。
若你想使输出的结果是1,2,3,4.要通过数组名和角标来表示这个数。并将它打印。
作者:
王贺
时间:
2013-11-26 22:09
byte[] by={1,2,3,4};
String s1=new String(by);
简单的走一下过程,byte数组,类型还是数字型的,把它封装为字符串,中间还有一个过程,先把每个数字转换成字符型:也就是把每个数组元素转换成字符型,可以具体操作下,System.out.println((char)a); 这行代码可以理解吧,然后再把转换过来的字符数组转换成字符串;
举个例子吧,char c=(char)1; 输出:;
作者:
樊志伟
时间:
2013-11-26 22:18
2楼正解
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2