在Java中进行原语long和int比较的时间

在Java中进行原语long和int比较的时间,java,Java,我的问题是它们是作为int还是long进行比较的 我认为除非我们指定,否则两者都是int long l = 1234; int i = 1234; if (l == i) { System.out.println("equals"); } else { System.out.println("not equals"); } 如果有人有更深的理解,请解释 由于==运算符的一个操作数为长(l),因此在将i转换为long后,它会比较两个long 相关JLS报价: 如果相等运算符的操作数

我的问题是它们是作为
int
还是
long
进行比较的

我认为除非我们指定,否则两者都是int

long l = 1234;
int i  = 1234;

if (l == i) {
  System.out.println("equals");
} else {
  System.out.println("not equals");
}

如果有人有更深的理解,请解释

由于
==
运算符的一个操作数为
l
),因此在将
i
转换为
long
后,它会比较两个
long

相关JLS报价:

如果相等运算符的操作数均为数值类型,或一个为数值类型,另一个可转换为数值类型(§5.1.8),则对操作数(§5.6.2)执行二进制数值提升

如果提升后的操作数类型为int或long,则执行整数相等测试

否则,如果其中一个操作数的类型为long,则另一个操作数将转换为long


它必须是
int
long
,因为一些较大的long值不能转换为int值而不丢失精度。

我猜
i
被隐式转换为long,然后与您的
l
进行比较
l
long
,然后比较是在两个long之间。最长的类型是使用的类型。阅读JLS关于这些基本的东西。
l
属于
long
类型,因为它是这样声明的。在比较表达式中,
int
值提升为
long
,因此比较两个
long
值。@xander不要猜测,请阅读规范以了解其作用。删除“我的问题是它们是作为int还是long进行比较?”从“代码”部分,将其添加到正文中对于这种基本的东西没有dupetarget?@T.J.Crowder有时回答比找到dupe更容易:/谢谢。于是,汽车促销就开始了
long l = 1234L;