我正在查看由String
,StringBufer
和其他一些人实施的Javadoc for the CharSequence界面,更具体地说是chars()
方法,Javadoc说} p>
返回一个int流,从中对此值进行零扩展 序列
现在,我知道它会返回int
个值,而int
that can be cast to char
。但“零延伸”意味着什么?
答案 0 :(得分:13)
Int是32位值,char是16位值。零延伸只意味着高阶"未使用" int中的位是零。
我猜它是有记录的,因为,以一种方式查看,操作将char
值视为16位整数,并且当从整数转换为更大的整数时,库的用户这样的方法必须知道如何处理标志。
对于那些不知道的人,有符号整数值保留其最高位作为符号位&#39 ;;如果是1,则该数字为负数。当转换为更大的整数时,如果最高位被复制到所有'额外的'在新值中的位,我们说转换是"符号扩展"。只有这样做,新整数才会与较小的有符号整数具有相同的有符号数值。如果较小的整数值是无符号的,则最高位表示与所有其他位一样的值,并且仅在没有符号扩展的情况下,值将是相同的。
Java语言没有无符号整数作为数据类型,因此没有符号扩展名的转换可能会被视为异常。
如果一个常量表示特定字符的(带符号)整数值,则在转换为32位整数后,如果转换包含符号扩展,则该常量仍然是准确的。因此,了解任何给定转换如何处理原始值非常重要。