在这里用int代替byte

时间:2014-04-24 12:43:34

标签: java

考虑我们正在添加2个数字

int x = 10;
int y = 20;

为什么我们在这里使用int而不是byte?我只是重温Java的基础知识。 字节数据类型仅占用1个字节,其范围为-128到127(包括端点)。 为什么我们在这里使用int虽然它占用4个字节并且其范围也很大。 使用byte x = 10;byte y =20;是否可以提高性能并节省内存? 在正常的编程中,最常见的是初始化我们使用int的东西,为什么会这样呢?

更新:

更确切地说,这是我对此的解释。由于一个字节的大小为8位,因此为变量x和y分配了8位的特定空间,如果我错了,请在此纠正。 因此,如果我们声明类型为int的x和y,则为每个x和y变量分配32位空间。因此,我们的内存中的空间被占用,尽管我们使用10和20之类的小数字,这些数字类型很适合。

请更正。

7 个答案:

答案 0 :(得分:2)

它经常使我们的代码灵活。想象一个程序,如果我输入128而不是127,我们会得到不准确的结果。

我同意,int类型会带来不必要的开销,但在应用程序的宏方案中(大多数情况下)开销可以忽略不计。

答案 1 :(得分:2)

如果需要,可以使用Byte类型短裤,它比int类型短:

byte x = 10;
byte y = 20;

它没有任何问题。如果你想实现内存优化它可能是有用的,但在99.9%的时间内使用这种低级优化是没用的。

答案 2 :(得分:2)

通常这样的事情归结为计算机体系结构,并非所有处理器都有单字节的指令,本身它们通常在int类型上运行。然而,int大小可能在不同的体系结构中有所不同,使用这些事物上的字节可以归结为字节函数的二进制评估。编译器通常无法判断这些值是否会溢出,因此无法实现智能"关于优化。即使他们不会溢出,仍然需要确定他们不会。因此,它将二进制掩码所需的数据,移动它们,计算操作,再次移动它们并合并到最终的存储器位置。这就是程序员通常使用整数的原因。

答案 3 :(得分:2)

通常人们不会将字节用于小数字,因为它不会产生 如果你没有很多,那么差异就是明显的。另请注意字长 32位计算机的长度与int的长度相同,所以会发生什么 表现并不总是那么明显。

答案 4 :(得分:1)

有几个原因:

  1. 因为如果以后数字发生变化,我们就不必考虑范围/ reinitliazie。
  2. 因为int表示没有浮点的数字。如果我们阅读int,我们就会知道它是什么。 byte代表一个特殊的字节,而不是一般的小数字。如果你只是想要一个数字,int更自我解释,例如计算东西。人们会立即认出它,这将有助于理解代码。
  3. 最重要的是,内存使用量的差异无关紧要。它的3个字节。即使您有1000个变量,差异也无关紧要。

答案 5 :(得分:1)

我们使用int进行整数值的普通操作,我们需要一个公共的整数范围。从技术上讲,使用byte没有问题,因为我们确定我们正在使用的数字范围,例如以下内容完全是一个有效的代码块:

 for (byte b = 0; b < 127; b++) {
     System.out.println(b);
 }

但正如你想将上限提高到128那样,使用byte变成了一个无限循环!因此int在很多情况下都是enough,或者足以应对未来的变化。

BTW,在许多地方使用int实际上更常见(例如作为数组索引),因此您的代码比那些地方使用byte的代码更具可读性。

要点:

  1. int包含一系列在日常使用中更常见的数字
  2. 使用int可以轻松降低程序维护成本
  3. 在许多地方使用int会使您的程序在许多情况下更具可读性
  4. 如果您正在编写对内存使用情况非常敏感的代码(例如Android应用),并且您确定byte已足够且将来可以使用它。

答案 6 :(得分:0)

您可能需要考虑的另一件事是JVM 2.11.1规范文档中提到的实际类型计算类型。列于Table 2.3

文字类型boolean byte charshort的计算操作将按int类型执行,因此您不是使用byte代替int减少系统上的任何“操作负载”,两者的指令周期将相同,并且需要相同的操作时间。

但是,使用byte肯定可以保留一些非常微不足道的内存量。但是你可以牺牲它来提高程序的可读性和代码结构,同时最小化(-128到127)范围风险。