char to byte

fuyou001 2009-09-13 09:23:29
byte b = 'b';
System.out.println(b);


上面代码正常,打印出98

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

报 Type mismatch: cannot convert from char to byte


如果 按照java 语法,两个例子都会报cannot convert from char to byte


而第一个例子没有
这是不是说明类型为char的小于255实际是用byte存储,当大于255时才会用两个字节存储

或是什么别的原因

...全文
544 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
chinahnzhou 2010-12-07
  • 打赏
  • 举报
回复
一个字符占用8位,一个汉字占用16位,byte是8位。
youyou1225 2009-09-14
  • 打赏
  • 举报
回复
按照char都是两个byte的理论来说,那真说不过去了!这也可能是java的灵活之处吧!
正如楼主所说:
类型为char的小于255实际是用byte存储,当大于255时才会用两个字节存储 !

我也这么认为!
舷Kelvin 2009-09-14
  • 打赏
  • 举报
回复
大约创造者们就是这么规定的嘛。给byte赋值的时候,'b'就当成一个Unicode码处理了。
fuyou001 2009-09-14
  • 打赏
  • 举报
回复
自己再顶下
pigjavalife 2009-09-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 fuyou001 的回复:]
引用 2 楼 gesanri 的回复:
不是吧,我觉得是都是2个字节存储,只是如果可以转为byte的话就转换,不能转换为byte的话就报错


如果都2字节 ,怎么解释第一个例子
[/Quote]
最好的解释是编译器会检查你是否是225以内的编码,否则不让通过,事实编译器就是这么做的
fuyou001 2009-09-14
  • 打赏
  • 举报
回复
fuyou001 2009-09-14
  • 打赏
  • 举报
回复
再顶下
bayougeng 2009-09-13
  • 打赏
  • 举报
回复
确实很奇怪。关注。
linloveby 2009-09-13
  • 打赏
  • 举报
回复
char不能强制转化为byte的,'b'可以被识别为一个byte,也可以识别为一个char,它可以赋值给byte或char类型,但'中'不一样,java认为汉字是二个byte(参见 unicode),因此不能赋值给一个byte。

char a='a';
byte b=(char)a;//Type mismatch: cannot convert from char to byte
char b='中';
byte bb=(char)b;//Type mismatch: cannot convert from char to byte
fuyou001 2009-09-13
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 crane99 的回复:]
在java中,byte分配一个字节,因此范围是-2^7~2^7-1。
char一般分配为两个字节。java中char常量使用的是Unicode字符集,‘b'在Unicode就是第98个字符,而'中'是第20013个。
因此,在将‘b'转换为byte类型时,它没有超过2^7-1,java解释器通过了;而'中'超过了2^7-1,因而java解释器会提示你这样做可能损失精度的,如果你byte b = (byte)'中'这样强制转换,是可以编译通过的,也就是说你默认接受了精度的损失。


[/Quote]

我关注的点不是精度损失,而是类型类型转换错误

crane99 2009-09-13
  • 打赏
  • 举报
回复
在java中,byte分配一个字节,因此范围是-2^7~2^7-1。
char一般分配为两个字节。java中char常量使用的是Unicode字符集,‘b'在Unicode就是第98个字符,而'中'是第20013个。
因此,在将‘b'转换为byte类型时,它没有超过2^7-1,java解释器通过了;而'中'超过了2^7-1,因而java解释器会提示你这样做可能损失精度的,如果你byte b = (byte)'中'这样强制转换,是可以编译通过的,也就是说你默认接受了精度的损失。

fuyou001 2009-09-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 gesanri 的回复:]
不是吧,我觉得是都是2个字节存储,只是如果可以转为byte的话就转换,不能转换为byte的话就报错
[/Quote]

如果都2字节 ,怎么解释第一个例子
gesanri 2009-09-13
  • 打赏
  • 举报
回复
char为2个字节,如果高字节全为0的话,就能转为byte,因为不影响结果,否则不行,我是这么估计的
gesanri 2009-09-13
  • 打赏
  • 举报
回复
不是吧,我觉得是都是2个字节存储,只是如果可以转为byte的话就转换,不能转换为byte的话就报错
java_object 2009-09-13
  • 打赏
  • 举报
回复
你说 对了,汉字就是 2个字节 存储的
内容概要:本文围绕“单相逆变器闭环逆变电路PWM模型仿真研究”展开,基于Simulink平台构建单相逆变器的闭环控制系统仿真模型,重点研究PWM调制技术在逆变电路中的应用与实现。文中详细阐述了系统架构设计、电压电流双闭环控制策略的实现原理、控制器参数设计及仿真建模全过程,并通过仿真结果验证了控制方案在动态响应、稳态精度与系统稳定性方面的有效性。同时,文档还涵盖多种电力电子系统典型应用场景,如多类型短路故障仿真(中性点不接地、经小电阻接地、经消弧线圈接地等)、软开关技术、微电网能量管理、MPPT控制等,体现出较强的技术综合性和工程实践价值。; 适合人群:电气工程、自动化、电力电子与新能源等相关专业的高校本科生、研究生、科研人员,以及从事电力系统仿真、逆变器设计与新能源并网技术研发的工程技术人员。; 使用场景及目标:①掌握基于Simulink的单相逆变器闭环控制系统建模与PWM仿真方法;②深入理解双闭环控制、SPWM/SVPWM调制、系统稳定性分析等核心技术原理;③为课程设计、毕业设计、科研项目或实际工程开发提供可复用的仿真模型与技术支持; 阅读建议:建议结合文中仿真模型动手实践,重点掌握PI控制器参数整定、PWM信号生成机制与仿真结果分析方法,同时可延伸学习文档中涉及的软开关、故障仿真、微电网控制等关联技术,以拓展系统级设计能力。

62,622

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧