最近群友抛出了一个面试题就昰下图中的第二题,是关于一个forfor语句是先判断再循环吗的执行结果的问题他的代码的执行结果是什么呢?
下面的例子和面试题上面的大哃小异是个非常简单的例子。首先这个代码是可以编译通过的也可以正常执行的。那么执行结果是什么呢会跟我们猜想的一样吗?
那么问题来了为什么是这个结果呢?我们可以借助javap命令反编译我们刚才编译的T.class进行分析 如果对jvm不了解的可以参阅。
- 先贴出原版的字节码反编译后的代码后边会对反编译的文件进行逐行解析,那么我们先来看看上述类反编译后的样子吧如下所示:
对反编译后的文件是不是一脸懵逼,没太看懂是什么意思呢没关系,下面我们进行逐行分析
public T(); // 这里是默认生成的无参构造函数部分开始 // 这里是默认生成的无参构造函数部分结束 3: iload_0 //从局部变量表中加载int型的数据到操作数栈 16: iload_1 //从局部变量表中加载int型的数据到操作数栈
從反编译文件以及流程图中我们可以看出forfor语句是先判断再循环吗执行的顺序是:
所以我们的执行输出结果是:abdcbdcb
不对之处还望大家指正。