2

我想知道与 Java 中的原始类型相关的一个问题。当shortbyte类型被 VM 编译成int原始类型时,那么使用这些类型的目的是什么?

4

4 回答 4

4

它们表现为字节或短路,并被验证为字节或短路。

示例 1:

    byte b = 122;
    System.out.println((byte)(b*5)); // outputs 98

示例 2:

    byte b = 1422; // doesn't compile

规范

整数类型的值是以下范围内的整数:

对于字节,从 -128 到 127(含)

简而言之,从 -32768 到 32767,包括

对于 int,从 -2147483648 到 2147483647,包括

长期,从-9223372036854775808到9223372036854775807,包括

对于 char,从 '\u0000' 到 '\uffff' 包括在内,即从 0 到 65535

您可能对整数的数值运算总是导致 int 或 long(即a*bwereabare 类型byte为 an的结果)这一事实感到困惑int。或者由于内存可以对齐并浪费一些地方的事实。但是 abyte和 ashort真的不会像 anint那样溢出。

于 2012-12-11T10:54:56.770 回答
1

字节和short确实被JVM提升为int,但只有当它们在方法中用作字节码中的局部变量时。但作为领域

private byte field1;
private short field2;

它们将相应地占用 1 和 2 个字节。

字节在 Java 中非常重要,因为它们用于字节数组,首先用于输入/输出操作,如 java.io.InputStream.read(byte[] bytes)

简而言之,它很少使用,尽管它对于存储大量相对较小的数字可能很有用,以节省内存

于 2012-12-11T11:05:56.363 回答
0

对于网络通信图像处理,您需要字节。并且它们被视为bytes. 如果他们不是,那将毫无意义。

于 2012-12-11T10:57:57.567 回答
0

byte 和 short 不编译为 int,它们只是适合 int。即,您可以将一个字节值分配给一个 int 变量。

byte b=5;
int i = b;

但不是相反,除非你明确地投射它

int i=4;
    byte b = i; //compiler error 

int i=4;
    byte b = (byte)i; 
于 2012-12-11T10:57:58.853 回答