如何解决是否可以在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);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。