是否可以在java中将增量运算符从int向上转换为long?

问题描述

假设我为 int 变量分配了最大值。

int a = 2147483647;

如果我增加,它会导致溢出。

System.out.println(++(long)a);

这甚至被允许吗??上面的行给出了错误 java:意外类型 要求:变量 发现:值

解决方法

这是不允许的。转换会改变表达式的类型,从而产生一个表达式++ 运算符递增 变量,而不是表达式,因此它不能对表达式 (long)a 进行操作。

为了使 ++(long)a 有意义,a 在运行后将具有 long 类型,但 Java 是静态类型的。变量的类型一旦声明就不能改变!您可以创建另一个类型为 long 的变量,并将 a 分配给它。然后你可以增加新变量而不会导致溢出。

long longA = a;
System.out.println(++longA);

另一种方法是让 int 溢出,并将溢出的 int 视为 long

System.out.println(Integer.toUnsignedLong(++a));

这会让人产生一种错觉,即 int 可以突然存储更广泛的数字,但实际上您只是在以另一种方式解释负 int

,

++ 不只是增加值,它还存储结果值 - 它需要一个变量,一个可以在赋值左侧使用的表达式 - 同样 ((long) a = ... 不是有效。

只需使用 (long)a + 1


++ JLS 15.15.1. Prefix Increment Operator ++ 的文档

... 一元表达式的结果必须是一个变量...否则会发生编译时错误。 ...

强制转换 ((long)a) 不会产生变量,无法使用。

,

这样理解吧。 (long)++a(long)a++ 将起作用,但在 (long)++a 的情况下,类型转换将在增量之后发生,其中位已经被 int 淹没。所以,你不会得到你想要达到的目标。在您的情况下 ++(long)a 这是无效参数问题,您的代码将无法编译。但是你可以这样做:

int a = 2147483647;
long b=(long)a;
System.out.println(++b);

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...