为什么它被假定为 long 没有后缀

Why it's assumed long without suffix

以下代码无法编译,因为 x 的值是 long 值。所以在第二行中,不可能将长值分配给 y.

long x = 10;
int y = 2 * x;

我的问题是: 第一行long类型的变量中没有后缀L,不是应该假定为int类型吗?

在执行操作之前,您需要转换为 int

long x = 10;
int y  = 2 * (int)x;

您的操作结果必须是 int。如果不做缩小转换o.k.a。将您操作中的任何原始数字类型的操作转换为 int,这意味着您的操作结果将是范围更广的数字。通过强制转换,您让编译器知道您确信您的结果将在 int 范围内,这样它就知道您似乎不会丢失信息(即使您不强制转换并期望 double例如,但那是完全不同的事情)。您可以找到关于您的问题的出色解释 here