关于java中的一个小问题

如图图片说明
这是一个求最大公约数的方法,我想问的是,如果给if语句后面加上括号,就是像我图片中那样的

public static int gcd(int n1,int n2){
        int gcd=1;
        int k=2;
        while (k<=n1&&k<=n2) {
            if (n1%k==0&&n2%k==0)
            { //看到有套嵌的循环不要跳。。。仔细看。。。
                gcd=k;
                k++;
                //continue;
            }

            System.out.println("11111");
            System.out.println(gcd);
        }

        return gcd;


    }

如果给if加上了{},为啥这个while循环跳不出来?

请注意加上大括号后意味着只有当n1,n2对k取余都为0的情况下k值才会改变,我们以k=2,n1为大于2的奇数来讲,那么n1%k==0永远不可能成立,意味着k只能等于2,进了这个循环便没有退出条件因此构成死循环。当你不加大括号时,if的执行体是 gcd=k;这一条语句, k++;不属于循环体,因此每次迭代k值都会增大,直到退出循环。

图片和后面的代码一样啊?? 是我眼花了~~?
有没有语法错误提示?加上{}后应该在里面加一个;,这样if会执行空语句,然后接着执行后边的,试试?

if会执行空语句k n1 n2 的 值都没有发生改变 。然后就是一值输出,自然是死循环了

可以试想一下if里面是flase的时候,if后面的代码块并没有执行,也就是k值没有变化。循环一直为真。然后就是死循环了。

int getGCD(int x, int y) {
while(y!=0){
y=x+y;
x=y-x;
y=(y-x)%x;
}
return x;
}