为什么Java中的字节表示以十进制形式存储数据?

时间:2016-03-20 00:55:21

标签: java jvm

我正在调试一个问题,我从字符串的二进制表示创建了一个字节数组,如下所示。

  1. 在调试数组时只是为了查看它是如何存储的,我可以看到它们在内部存储为小数。这是为什么?
  2. 当它被解释为字节码时,我假设它将被转换为二进制。那么为什么不首先存储二进制文件。
  3. int year = getInt(input, "Please enter a two-digit year", i -> (i>=10 && i<=99));
    

    我可能在这里遗漏了一些东西。因此请求您的指导。

3 个答案:

答案 0 :(得分:4)

似乎存在一种非常普遍的误解。

在某种意义上,所有数据以“二进制形式”存储。特别是,整数数值,如byteshortint等,内部都以二进制形式存储。此内部表示称为Two's complement form

(对于浮点数,表示有点复杂:它是IEEE 754表示 - 仍然是以二进制形式存储 < / p>

可能导致您的问题的关键问题是:当您只是打印一个数字,或将它们转换为字符串时,

System.out.println(someByte);

String s = String.valueOf(someByte);

然后默认情况下,打印小数表。主要是因为这是人类最“自然”和最易阅读的形式。

您可以将字节传递给Integer.html#toBinaryString以创建其二进制表示的字符串表示形式:

System.out.println(Integer.toBinaryString(someByte));

答案 1 :(得分:2)

好吧,JVM就像任何程序一样,不会将数值存储为“十进制”或“十六进制”。它只是内存中的一种模式。您的调试器显示十进制格式的值。这只是为了方便起见,因为大多数人更喜欢十进制到二进制格式以便于阅读。对于计算机本身,它只是一个8位长的位串,存储为二进制值。

答案 2 :(得分:1)

  
      
  1. 在调试数组时只是为了查看它是如何存储的,我可以看到它们在内部存储为小数。那是为什么?
  2.   

您看到字节值以十进制显示。调试器未显示内部值。

  
      
  1. 当它被解释为字节码时,我假设它将被转换为二进制。那么为什么不首先以二进制形式存储。
  2.   

存储在二进制文件中。