java如何比较两种不同大小的原始数据类型
在Java中,如何比较两种不同的基本数据类型,如java如何比较两种不同大小的原始数据类型,java,types,primitive,primitive-types,Java,Types,Primitive,Primitive Types,在Java中,如何比较两种不同的基本数据类型,如inta=3和byte b=3 我注意到int的大小是4个字节,而byte只有1个字节。它是按位比较吗?它不是。永远不会 int a = 3; byte b = 3; if (a == b) { ... } 这不是int和字节之间的比较=只能比较相同类型的原语。这是int和int之间的比较(因为int是两者中较宽的一个)。它相当于下面更显式的代码 int a = 3; byte b = 3; if (a == (int)b) { ...
inta=3
和byte b=3
我注意到
int
的大小是4个字节,而byte
只有1个字节。它是按位比较吗?它不是。永远不会
int a = 3;
byte b = 3;
if (a == b) {
...
}
这不是int
和字节之间的比较<代码>=
只能比较相同类型的原语。这是int
和int
之间的比较(因为int
是两者中较宽的一个)。它相当于下面更显式的代码
int a = 3;
byte b = 3;
if (a == (int)b) {
...
}
除了几个例外,至少在概念上,在进行比较之前,较小的类型会转换为较大的类型
实际比较通常由直接在CPU上的机器代码指令执行。如今,这种比较不会一点一滴地进行;将同时比较所有位。如果对小于int的基本数据类型(即字节、短字符或字符)执行任何数学或逐位操作,则在执行操作之前,这些值将提升为int 考虑以下代码段和生成的字节码:
int a = 1;
byte b = 1;
if (a == b) {
}
public static main([Ljava/lang/String;)V
L0
ICONST_1
ISTORE 1
L1
ICONST_1
ISTORE 2
L2
ILOAD 1
ILOAD 2
IF_ICMPNE L3
L3
RETURN
从上面的示例中可以看出,两个常量(a、b)都是以
ICONST
指令作为int
常量推送到操作数堆栈上的。它是通过一个不会丢失信息的过程来执行的。float和long是此规则的一个重要例外。Java规范中对此进行了详细说明。