Java中一個for語句導(dǎo)致無窮大死循環(huán)的例子
在Java開發(fā)中常用到For循環(huán),它對簡化業(yè)務(wù)處理,提高效率,非常有幫助。但要防止程序算法中可能導(dǎo)致死循環(huán)的情況,而且有的死循環(huán)還不好察覺。比如下面這個例子,算法極容易認(rèn)為是50,實(shí)際上是無窮大的一個死循環(huán)。
public class CycTest {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
int end = Integer.MAX_VALUE; //定義個循環(huán)終止數(shù),可以無限大,區(qū)別于int型。
int start = end-50; //定義起始值
int count = 0; //初始值
for(int i=start;i<=end;i++){ //循環(huán)體
count++; //循環(huán)計數(shù)
System.out.println("本次循環(huán)次數(shù)為:"+count); //輸出
}
}
}
輸出結(jié)果:
run: 本次循環(huán)次數(shù)為:1 本次循環(huán)次數(shù)為:2 本次循環(huán)次數(shù)為:3 ...... 本次循環(huán)次數(shù)為:49 本次循環(huán)次數(shù)為:50 本次循環(huán)次數(shù)為:51 ......
總結(jié):
可能有人認(rèn)為輸出結(jié)果會是50次,實(shí)際上這是個死循環(huán)。end是無限大的數(shù),i<=end也就是無限大的數(shù)。所以說是無極限的。for(int i=start,i<end;i++),結(jié)果就是50了。i<end,表示邊界值不能是一個無窮大致, 而從start到end也就變成了一段區(qū)間了,區(qū)間就是50。所以開發(fā)中考慮到各種數(shù)據(jù)類型的取值范圍,特別是條件判斷及邊界取值時。
相關(guān)文章
SpringBoot Redis用注釋實(shí)現(xiàn)接口限流詳解
Redis 除了做緩存,還能干很多很多事情:分布式鎖、限流、處理請求接口冪等性。。。太多太多了~今天想和小伙伴們聊聊用 Redis 處理接口限流,這也是最近的 項目涉及到這個知識點(diǎn)了,我就拎出來和大家聊聊這個話題2022-07-07
SpringBoot使用@SpringBootTest注解開發(fā)單元測試教程
這篇文章主要介紹了SpringBoot使用@SpringBootTest注解開發(fā)單元測試教程,本文通過詳細(xì)的案例過程來說明如何使用該項技術(shù),需要的朋友可以參考下2021-06-06
Quarkus中RESTEasy?Reactive集成合并master分支
這篇文章主要為大家介紹了Quarkus中RESTEasy?Reactive集成合并master分支的詳細(xì)作用分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02
Java多線程實(shí)現(xiàn)Callable接口
本文給大家分享的是使用Java多線程來實(shí)現(xiàn)callable接口的方法,以及使用方法,另外還有一個網(wǎng)友的實(shí)例,希望能夠?qū)Υ蠹艺莆認(rèn)ava多線程有所幫助。2016-06-06
關(guān)于SpringBoot配置文件加載位置的優(yōu)先級
這篇文章主要介紹了關(guān)于SpringBoot配置文件加載位置的優(yōu)先級,我們也可以通過spring.config.location來改變默認(rèn)的配置文件位置,項目打包好后,我們可以通過命令行的方式在啟動時指定配置文件的位置,需要的朋友可以參考下2023-10-10

