1

如果我有以下情况:

byte[] byteArray = new byte[] {87, 79, 87, 46, 46, 46};

我知道每个元素的大小是一个字节。但我似乎不明白的是整数87如何存储在一个字节中?或者,如何byte[]存储数据?

编辑:我看到您可以在 java 中将 -128 到 127 存储在一个字节中。那么,这是否意味着无法在 a 中存储大于或小于这些数字的任何内容byte[]?如果是这样,那不是限制了它的使用吗?或者我不了解使用byte[].

4

5 回答 5

3

一个字节是 8 位。 2^8是 256,这意味着 8 位可以存储 256 个不同的值。在 Java 中,这些值是 -128 到 127 范围内的数字,因此 87 是一个有效字节,因为它在该范围内。

同样,尝试做类似的事情byte x = 200,你会看到你得到一个错误,因为 200不是一个有效的字节。

于 2012-07-31T19:11:23.820 回答
2

Abyte只是一个 8 位整数值。这意味着它可以保存从 -2^7 到 2^7-1 的任何值,其中包括 {87、79、87、46、46、46} 中的所有数字。

Java 中的 Aninteger只是一个 4 字节整数,允许它保存 -2^31 到 2^31 - 1

于 2012-07-31T19:10:57.923 回答
0

我认为简短的回答是 byte[] 存储字节。数组中的数字 87 在它上面是一个字节,而不是一个 int。如果您将其更改为 700(或高于 127 的任何值),您将收到编译错误。试试看。

于 2012-07-31T19:13:31.263 回答
0

Java 字节是一个基元,最小值为 -128,最大值为 127(含)。87 在允许的范围内。字节数据类型可用于在大型数组中节省内存,其中内存节省实际上很重要。

byte[] 是一个对象,它存储了许多这些原语。

于 2012-07-31T19:11:34.693 回答
0

您可以使用byte在其中存储 8 位值,其(有符号)范围从-128127

byte[]你可以做一些特殊的操作,比如从给定的字节流构建s 并用String所需的 解码它们Charset,一些函数会给你byte[]作为它们的返回值。

我对 JVM 的内部结构知之甚少,但它可能会节省内存。

于 2012-07-31T19:20:20.247 回答