Java 中的有符号和无符号数据类型

2022-09-02 00:57:10

我对Java支持哪些无符号数据类型有点困惑?

我已经读过为什么Java不支持无符号的ints?但我不明白它非常复杂的解释(至少对我来说是这样)。


答案 1

Java仅支持有符号类型(除外),因为假设一种类型对于初学者来说比每种大小有两个类型更容易理解。在C中,它被认为是错误的来源,因此不包括对无符号类型的支持。char

所以设计师选择了四种尺寸

  • byte,8 位
  • short,16 位
  • int,32 位
  • long,64 位。

为了保持一致性,它们都是像签名一样,但是有符号字节很少非常有用,并且鉴于它们允许无符号的16位具有无符号可能更有意义。floatdoublecharbyte

这不能很好地工作的地方是当您必须与使用无符号整数类型的系统进行交互时。这可能是混淆的根源,以及使用哪种类型,因为它通常没有任何区别。Java 8 也将具有支持无符号类型的操作。这些被添加到包装器类中,例如IntegerLong


答案 2

所有 Java 数值类型都有符号。这是设计师的决定。有些人认为有符号字节是一个坏主意。J.Bloch在接受采访时说:“我要说的是,Java平台最奇怪的事情是字节类型是有符号的http://www.theserverside.com/news/thread.tss?thread_id=51624