Java中字节和短基元类型的用途
我想知道一个与Java中的基元类型相关的问题。当VM将short和byte类型编译成int基元类型时,那么使用这些类型的目的是什么?它们表现为byte或short,并被验证为byte或short 例1:Java中字节和短基元类型的用途,java,Java,我想知道一个与Java中的基元类型相关的问题。当VM将short和byte类型编译成int基元类型时,那么使用这些类型的目的是什么?它们表现为byte或short,并被验证为byte或short 例1: byte b = 122; System.out.println((byte)(b*5)); // outputs 98 例2: byte b = 1422; // doesn't compile 发件人: 整数类型的值是以下范围内的整数: 对于字节,从-128到12
byte b = 122;
System.out.println((byte)(b*5)); // outputs 98
例2:
byte b = 1422; // doesn't compile
发件人:
整数类型的值是以下范围内的整数:
对于字节,从-128到127,包括
简而言之,从-32768到32767(含)
对于整数,从-2147483648到2147483647,包括
长期而言,从-9223372036854775808到9223372036854775807,包括
对于char,从'\u0000'到'\uffff',包括在内,即从0到
65535
您可能被以下事实弄糊涂了(这是
a*b
是a
的结果,b
是byte
类型的是int
)。或者是因为内存可以对齐并浪费一些空间。但是byte
和short
确实不会像int
那样溢出 对于网络通信和图像处理您需要字节。它们被视为字节
。如果不是,那么就没有意义了。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;
的确,byte和short是由JVM提升为int的,但只有当它们在字节码和方法中被用作局部变量时才是如此。但作为田野
private byte field1;
private short field2;
它们将相应地占用1和2个字节
字节在Java中非常重要,因为它们用于字节数组,首先用于输入/输出操作,如Java.io.InputStream.read(byte[]字节)
简而言之,它很少被使用,尽管它在存储大量相对较小的数字时可能很有用,但为了节省内存为什么您认为short
和byte
被编译成int
?(如果是的话,这真的是毫无意义的)虽然没有字节码可以对short或byte进行算术运算,而且它们在jvm级别被强制转换为int,但您无法确定机器代码是如何威胁它的,这在本例中才是真正重要的。请记住,字节码不是机器码,字节码是由JIT编译器编译的。同样,布尔、字节、短字符和字符类型的值数组的加载使用Java虚拟机指令进行编码,这些指令的符号扩展或零将值扩展到int类型的值。因此,对实际布尔类型的值的大多数操作,byte、char和short由对Java中计算类型int的值进行操作的指令正确执行™ 虚拟机规范)@zawart该规范没有解释jvm应该如何在内部工作,因为它是特定于实现的。字节码正在将字节转换成整数,但低级别的实现可能使用字节。@zawart:对,操作是在int
值上执行的,这与说short
和byte
被编译成int
完全不同(实际上是说它们在JVM中不存在)。它们仍然存储为较小的值,因此,例如short[]
,每个元素将使用2个字节,而不是4个字节。我想知道这些类型的应用程序是什么。我知道java语言规范的区别。关于字节,为什么不使用整数?结果将与上面给出的示例中的结果相同。请查看我上面从虚拟机规范中引用的内容。