【问题标题】:Why int variable value is set to Integer.MAX_VALUE when it was at Integer.MIN_VALUE and decremented [duplicate]为什么 int 变量值在 Integer.MIN_VALUE 时设置为 Integer.MAX_VALUE 并递减[重复]
【发布时间】:2013-09-24 12:20:41
【问题描述】:

在经历了this 的问题之后,我的脑海里又多了一个。 问题:为什么将整数变量值设置为Integer.MAX_VALUE

例如。

int x = Integer.MIN_VALUE;
x--;
if (x == Integer.MAX_VALUE) {
    System.out.println("Why....");
}

必须有某种原因才能明确实施此行为,否则抛出Exception 会是一个更好的主意。我无法在 JLS 中找到/定位这种行为。

【问题讨论】:

  • 因为其他语言都是这样的?
  • 我假设是因为创建异常对象并抛出与它相关的性能
  • @PradeepSimha 我不认为性能是他们主要关心的问题,因为这种情况很少见,而且功能不能因为性能而受到影响。我们在java中已经有很多异常了。
  • @Doorknob 不一定是所有其他语言,而是处理器架构本身。

标签: java integer operators


【解决方案1】:

因为下溢。计算机多年来一直以这种方式工作,在这里抛出异常将是一个可怕的想法。

【讨论】:

  • 但是抛出异常是个坏主意,如果实现IntegerValueUnderFlowException 来代替数学上和逻辑上的错误值,会有什么副作用。
  • @GauravGupta 处理器也是这样工作的。当然,它确实设置了指示发生下溢的标志,但这不是除以零之类的错误。
【解决方案2】:

http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.2

“整数运算符不以任何方式指示上溢或下溢。”

【讨论】:

  • 这就是我想要的。谢谢
猜你喜欢
  • 2012-03-12
  • 2016-07-19
  • 2015-11-03
  • 1970-01-01
  • 1970-01-01
  • 2020-06-12
  • 1970-01-01
  • 1970-01-01
  • 2012-10-29
相关资源
最近更新 更多