在Java中,如何比较两种不同的原始数据类型,例如int a = 3
和byte b = 3
?
我注意到int
的大小是4个字节,而byte
只有1个字节。这是一个有点比较吗?
答案 0 :(得分:5)
它没有。它永远不会。
int a = 3;
byte b = 3;
if (a == b) {
...
}
这不是int
和byte
之间的比较。 ==
只能比较相同类型的基元。这是int
和int
之间的比较(因为int
是两者中较宽的一个)。它等同于以下更明确的代码。
int a = 3;
byte b = 3;
if (a == (int)b) {
...
}
答案 1 :(得分:2)
如果对小于 int 的原始数据类型(即byte,short或char)执行任何数学或按位运算,则这些值将被提升为 int < / strong>在执行操作之前。
考虑以下代码片段和生成的字节代码:
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
常量。
答案 2 :(得分:1)
除了几个例外,至少在概念上,较小的类型在进行比较之前会转换为更大的类型。
实际比较通常由直接在CPU上的机器代码指令执行。这些天比较不会一点一滴;所有比特将同时进行比较。
答案 3 :(得分:0)
它通过widening进程执行,不会丢失信息。