A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 戴振良 黑马帝   /  2012-2-18 16:23  /  9888 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 戴振良 于 2012-2-25 10:32 编辑
  1.                 String a="a";
  2.                 char b='a';
  3.                 byte c=(byte)a;//这里会报错说:不可转换的类型
  4.                 byte d=(byte)b;
  5.                 System.out.println(c);
  6.                 System.out.println(d);
复制代码
char占两个字节,byte占一个字节,char比byte所占的内存大。
1、为什么char可以转换为byte,而String不行
2、char是什么样的字符时转换为byte会丢失精度,请举几个字符,谢谢!!

点评

顶  发表于 2012-4-11 09:08

评分

参与人数 3技术分 +1 黑马币 +40 收起 理由
asf + 20 神马都是浮云
任成荣 + 20 赞一个!
admin + 1

查看全部评分

8 个回复

倒序浏览
本帖最后由 pengfangjava 于 2012-2-18 16:49 编辑

1. char转换为byte, 是将char的低8位取出来作为一个字节
    String可以转为byte数组 : byte[] buf = a.getBytes();

2.
char c = '中';
byte b=(byte) c;
System.out.println(b);
c=(char) b;
System.out.println(c);

输出结果:
45
-

可以看出,中文字符就会丢失精度

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
问题1:String不能这样去转换成char类型,如果需要可以这样转换:String str = "a";  char b =str.charAt(0);这样就可以了。
问题2:只要是char类型的,要转换成byte类型,都会丢失精度,不管是什么字符,都一样,你要搞清楚原理,为什么会出现丢失精度呢,
那是因为char在内存空间中占用2个字节,而byte类型,呵呵,肯定是占用了一个字节啊,不用我再说下去了吧?

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
占字节数不同
回复 使用道具 举报
为什么char可以转换为byte,而String不行
个人感觉对于这个问题,String是一个对象,而char是java中预定义的基本的说明类型,如果可以转换,我想只能是String对象才清楚如何去做了,这才是面向对象的方式了。因为它们没有什么内在联系,如果能转的话,有点牛马不对了。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
char占用两个字节而byte占用一个字节,所以char在转换为byte会出现丢失精度,string可以转换为byte在这里需要用到getbyte()
回复 使用道具 举报
我觉得 char 和byte都是基础数据类型 而string是引用数据类型 所以string只能转化成数组
回复 使用道具 举报
我记得调用一个 getByte()方法可以把String转成byte,你可以试下
回复 使用道具 举报
戴振良 黑马帝 2012-2-25 10:28:14
9#
明白了,谢谢大家!!

点评

好东西  发表于 2012-4-11 09:08
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马