Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中字节和短基元类型的用途_Java - Fatal编程技术网

Java中字节和短基元类型的用途

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

我想知道一个与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到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语言规范的区别。关于字节,为什么不使用整数?结果将与上面给出的示例中的结果相同。请查看我上面从虚拟机规范中引用的内容。