我想知道一个与Java中的原始类型相关的问题。当VM将 short 和 byte 类型编译为 int 基元类型时,那么使用这些类型的目的是什么?
答案 0 :(得分: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
您可能会因为numerical operations on integers always result in an int or a long(a*b
的结果为a
且b
属于byte
类型的结果而感到困惑int
)。或者记忆可以对齐并浪费一些地方。但byte
和short
实际上并没有像int
那样溢出。
答案 1 :(得分:1)
JVM确实将byte和short提升为int,但只有当它们在字节码中用作局部变量时才是方法。但是作为领域
private byte field1;
private short field2;
它们将相应占用1和2个字节。
字节在Java中非常重要因为它们在字节数组中使用,首先用于输入/输出操作,例如java.io.InputStream.read(byte [] bytes)
简而言之,它很少使用,虽然它可能对存储大量相对较小的数字有用,但对于记忆经济性
答案 2 :(得分:0)
对于网络通信和图像处理,您需要字节。他们被视为bytes
。如果他们不是那么那就毫无意义。
答案 3 :(得分: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;