微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决是否可以在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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?