我正在阅读byte stream试用版并注意到以下声明
请注意,read()返回一个int值。如果输入是一个流 字节,为什么不read()返回一个字节值?使用int作为返回 type允许read()使用-1表示它已到达结尾 流。
使用int
的原因是他们可以通过-1识别EOF。 (似乎很浅)
所以下一个更大的原始类型是short
并且它也支持-1所以为什么不使用它?
从我收集的内容:(使用int
的理由)
int
是首选。
(this) int
变量在其最后16位中保存一个字符值(来自
character
trial)我的理由是否正确?我错过了什么(比如纠错)?
答案 0 :(得分:8)
首选int
而不是short
的最重要原因是short
是一种二等公民:所有整数文字以及所有算术运算都是{{ 1}} - 键入,以便您在所有地方发生int
- > short
促销活动。此外,很少或根本没有参数反对使用int
。
答案 1 :(得分:1)
这是一个有趣的问题:-)。确实,他们必须使用有符号整数值类型来表示EOF,但int
优于short
的偏好可能只是表现。
正如我在另一个讨论过的StackOverflow线程中发现的那样,即使定义使用了int
,Java VM也会在内部自动使用short
。
Java文档指出,short应该用在大型数组和内存真正重要的情况下 - 来源 - http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html。这显然不是这种情况,因为我们总是得到一个值。
答案 2 :(得分:1)
只有一种情况,使用short
会给你一个优势:大型的短数组。可以肯定的是,只有在明确要存储的数字符合界限时才能使用它们。
在所有其他情况下,无论您有short
还是int
,都没有什么区别。例如:
class A {
short s;
double d;
}
不会使用比以下更少的内存:
class B {
int s;
double d;
}
因为对齐问题。因此,第一个只有10个字节的netto数据,而第二个有12个,当你分配一个对象时,它仍然会对齐到一些8字节的边界。即使它只是一个4字节的边界,内存使用也是一样的。