转换为char被认为总是缩小?

时间:2016-01-13 15:00:01

标签: java type-conversion

我正在为我的考试而学习,我发现在java中从byte转换为char被认为是缩小的。根据这本书,char的存储与byte相同,但它仍然被认为是缩小的。有人能解释一下原因吗?

此外,从字节转换为字符也是一个缩小范围!我认为如果A> B然后B

我知道这是一个愚蠢的问题。

enter image description here

2 个答案:

答案 0 :(得分:2)

charbyte可能被有效地视为Java中的缩小转换,因为它引入了信息丢失的可能性。虽然char确实是8位数且char是16位,但请记住,byte是Java中唯一的无符号基本类型。这意味着将char转换为127会截断任何负值。反向转换也在缩小,因为转换为byte时,任何大于signed的数字都将被截断。 Java的转换方式与C ++不同,unsigned<!-- START:LEFT --> <table width="295" align="left" border="0" cellspacing="0" cellpadding="0"> <tbody> <tr> <td> Left </td> </tr> </tbody> </table> <!-- END:LEFT --> <!-- START:RIGHT --> <table width="295" align="right" border="0" cellspacing="0" cellpadding="0"> <tbody> <tr> <td> Right </td> </tr> </tbody> </table> <!-- END:RIGHT --> 只意味着编译器会以不同方式解释这些位,但实际数字不会改变。

答案 1 :(得分:1)

实际上,从byte转换为char需要 扩展和缩小转换(一个接一个)。这正是Java语言规范所要求的。在section 5.5

  

转换上下文允许将强制转换运算符(第15.16节)的操作数转换为强制转换运算符明确指定的类型。

     

投射上下文允许使用以下之一:

(...)

  
      
  • 扩大和缩小原语转换(第5.1.4节)
  •   

本书中的表看起来不正确(我假设标题应该是“Java缩小转换”)。从bytechar没有缩小转化。实际的扩展和缩小基元转换列在JLS部分5.1.25.1.3中。

请注意,char只能通过缩小转化转换为byte,但byte无法仅通过扩展转换转换为char。 (并且,为了使事情变得更加复杂,charshort之间的转换是两个方向的缩小转换!)。

简单地回答您的问题:,原始转换为char始终是narrowing转化 - ,但可能需要首先执行扩展转化!的。