java循环返回结果_Java 循环(for、while)中整数相减结果返回输出"/"的问题

示例代码:public class Unbelievable {

public void test() {

int a = 5;

while ((a -= 2) > 0){

//代码

}

System.out.println("result= " + a);

}

public static void main(String[] args) {

Unbelievable un = new Unbelievable();

for (int i = 0; i < 2000_0; i++) {

un.test();

}

}

}

输出结果:

result= -1

result= -1

result= -1

result= -1

result= /

result= /

result= /

result= /

result= /

result= /

result= /

result= /

result= /

其中12821个输出 result= -1 ,7179个输出 result= /

1、问题原因

这是一个已知的bug。这里有两个关于它的bug的说明文档:

这个bug应该在以下版本中修复:

JDK 11: > 11.0.6

JDK 8: > 8u251

OpenJDK: > openjdk8u242

2、解决方法

在不更新JDK的版本的情况下,可以只需禁用jit或使用AtomInteger来解决。例如,public class WhileLoopTest {

public void test2() {

AtomicInteger i = new AtomicInteger(8);

while ((i.addAndGet(-3)) > 0) ;

System.out.println("i = " + i.intValue());

}

public static void main(String[] args) {

WhileLoopTest tst = new WhileLoopTest();

for (int i = 0; i < 50_000; i++) {

tst.test2();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值