查看原文
其他

磊哥工作十几年了,竟没有用过do-while!(文末送书)

磊哥 Java中文社群 2021-06-30

最近在看 Java 的基础知识,其中有部分是关于循环的,在 Java 中,循环的语法总共分为 3 种:forwhiledo-while,如下图所示:


但我惊奇的发现,在之前的职业生涯中(11 年),竟从未用过 do-while(尴尬),于是问了群里的小伙伴,发现也是鲜有人用。


do-while 语法分析

我们先来了解一下 do-while 的语法:

do {
     // statements
while (expression);

注意:最后一个分号不能省略,否则会提示编译出错

它的执行流程如下图所示:

那它究竟在什么地方用呢?

do-while 使用场景

在我多次的搜索和请教下,终于找到了两个相对满意的使用场景,接下来一起来看。

使用场景一:抢票

对于抢票业务来说,无论三七二十一,先抢了再说,然后在判断是否抢票成功,如果抢票成功则退出循环,否则继续执行抢票,实现的伪代码如下所示:

do {
    // 抢票代码...
while (没抢到票);

思路提供者:贾鲲

使用场景二:进制转换

经过大量搜索发现,在 JDK 的源码中,也存在少量使用 do-while 的场景,比如 Integer 中进制转换,相关源码如下:

static int formatUnsignedInt(int val, int shift, char[] buf, int offset, int len) {
    int charPos = len;
    int radix = 1 << shift;
    int mask = radix - 1;
    do {
        buf[offset + --charPos] = Integer.digits[val & mask];
        val >>>= shift;
    } while (val != 0 && charPos > 0);

    return charPos;
}

比如十进制转二进制就会执行此方法,在进制转换的业务中,无论任何情况,一定会至少执行一次进制转换的,因此这种业务场景就非常适合 do-while

总结

孔子说:温故而知新。当我们学完很多知识之后,回过头来再琢磨这些知识,发现很有趣,这就是知识的一大乐趣吧。本文我们介绍了两种 do-while 的使用场景,抢票和进制转换,你还知道哪些 do-while 的使用场景吗?欢迎评论区告诉我~

文末福利:送书

最后送两本朋友新出的书,作者亲笔签名版哦,包邮到家


第一本:《Web全栈项目开发入门与实战》

本书是手把手地教开发者如何开发一套全栈的 WEB 项目,项目的内容是一个类似闲鱼的二手交易平台,其中包含前端技术(主要使用 React 框架)和后端技术(主要使用Spring Boot 框架)。

第二本:Spring Boot技术内幕:架构设计与实现原理

关注此公众号,发送“送书”参与抽奖活动哦~


往期推荐

调研了100+开源博客,发现这5个最好用!


多图证明,Java到底是值传递还是引用传递?


阿里为什么推荐使用LongAdder,而不是volatile?


关注下方二维码,收获更多干货!

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存