我想知道与 Java 中的原始类型相关的一个问题。当short和byte类型被 VM 编译成int原始类型时,那么使用这些类型的目的是什么?
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*b
werea
和b
are 类型byte
为 an的结果)这一事实感到困惑int
。或者由于内存可以对齐并浪费一些地方的事实。但是 abyte
和 ashort
真的不会像 anint
那样溢出。
字节和short确实被JVM提升为int,但只有当它们在方法中用作字节码中的局部变量时。但作为领域
private byte field1;
private short field2;
它们将相应地占用 1 和 2 个字节。
字节在 Java 中非常重要,因为它们用于字节数组,首先用于输入/输出操作,如 java.io.InputStream.read(byte[] bytes)
简而言之,它很少使用,尽管它对于存储大量相对较小的数字可能很有用,以节省内存
对于网络通信和图像处理,您需要字节。并且它们被视为bytes
. 如果他们不是,那将毫无意义。
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;