java如何比较两个不同大小的原始数据类型

时间:2018-02-03 18:30:00

标签: java types primitive primitive-types

在Java中,如何比较两种不同的原始数据类型,例如int a = 3byte b = 3

我注意到int的大小是4个字节,而byte只有1个字节。这是一个有点比较吗?

4 个答案:

答案 0 :(得分:5)

它没有。它永远不会。

int a = 3;
byte b = 3;
if (a == b) {
  ...
}

这不是intbyte之间的比较。 ==只能比较相同类型的基元。这是intint之间的比较(因为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进程执行,不会丢失信息。