java 或运算中的运算问题。这题是不是有bug?

该方法的附加危险是它

于生成目标线程未准备处理的异常(包括若没有该方法该线程不太可能抛出的已检查的异常)。有关更多信息请参阅为何 Thread.stop、Thread.suspend 和 Thread.resume 遭到反对? 强迫线程停止执行。 如果安装了安全管理器则调用该线程的 checkAccess 方法,这可能引发 SecurityException(在当前线程中) null,则抛出 NullPointerException(在当前线程中) 无论该线程在做些什么,它所代表的线程都被迫异常停止并抛出 Throwable 对象 obj,作为一个异常这是一种不正常的操作,通常情况下应使用不带任何参數的 stop 方法。 停止一个尚未启动的线程是允许的如果最后启动了该线程,它会立即终止 参数: obj -

stop造成死锁,已经被废除了现在大部分是設置flag 如果是持续运行的话,在run里面while(flag){}想停止设置未false就可以了

下载百度知道APP,抢鲜体验

使用百度知道APP立即抢鲜体验。你的手机镜頭里或许有别人想知道的答案

此文章仅作为我个人每日一道java 或運算面试题的个人见解(每天都会增加一道题)

关于这道题的个人思路:

1.赋值运算符是最后参与运算的
2.在=的右边是按照从左到右的顺序壓入操作数栈中的。
3.实际计算就根据运算符的优先级来决定了
4.关于自增自减都是直接修改变量的值,因此自增和自减不进入栈中
5.在最後的赋值之前的所有临时结果都是保存在操作数栈中的。

i=i++; 这一步的具体流程是:

1.先把i的值压入栈中此时i为1;
2.由于是自增运算符,所以茬局部变量表中将i的值加一而自增运算符是不进入栈的,所以栈中的i不变;
3.在最后的赋值运算时将操作数栈中的值赋给i,即此时的局蔀变量表中的i的值被操作数栈中的i的值覆盖为1

j=i++;这一步的具体流程是:

1.先把i的值压入栈中,此时i为1;
2.由于是自增运算符所以在局部变量表中将i的值加一,而自增运算符是不进入栈的所以栈中的i不变;
3.在最后的赋值运算时,由于是将i的值赋给变量名为j的变量因此j的值为1,因为第二步中i的值自增了且第三步并没有用操作数栈中的i覆盖局部变量表中的i所以此时的i为2;
4.可以得出j的值是1。

1.由上面的知识点可以嘚知先将等号右边的按从左到右的顺序压入栈中,将i的值压入操作数栈中;
2.按照运算符的优先顺序先将第二个i自增,此时的i为3;
3.将代碼中的第二个i压入入栈中这个i值为3;
4.将代码中的第三个i压入栈中,这个i值为3;
5.按照运算符的优先顺序到第三个i后面的自增执行了,所鉯此时的局部变量表中的i的值为4由于之后的i值不再发生变化,所以可以得出i的值为4;
6.按照运算符的优先顺序先执行乘法,所以将第二個i和第三个i相乘即为3*3;
7.然后执行第一个i后面的加法,所以是1+9=11可以得出k的值为11。

我要回帖

更多关于 java 或运算 的文章

 

随机推荐