java语言中,是++优先还是*优先?计算的优先顺序是?例:z=y*x++,其中x=5,y=9,答案是?还有,++x和x++
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java语言中,是++优先还是*优先?计算的优先顺序是?例:z=y*x++,其中x=5,y=9,答案是?还有,++x和x++相关的知识,希望对你有一定的参考价值。
的区别是?
Java中的运算符按优先级从高到低排列如下:[ ] ( ) ++ -- ! ~ instanceof * / % + - << >> >>> <> < = > \ == != &^& & || ? := op= 。具体解释如下:--运算符用于表示减1操作。++和--运算符既可以作为前缀运算符,也可以做为后缀运算符。双目整数运算符是:运算符操作**+加-减*乘/除%取模&位与|位或^位异或<<左移 >>右移(带符号) >>>添零右移整数除法按零舍入。
如果X=5,y=9.z=y*x++应该按着运算符的优先级先算X++,再算y*X++所以Z=5*9=45.
下面在解释++X和X++。如果X++意思是先引用,后自增,就如上题。X=5,X此时等于5,当下次循环再用到X时,X就等于6了,因为X++后就是6。而++X正好相反,当X=5,++X后X此时等于6。下次循环引用时是7。所以他是先自增后引用。理解了后就记住,++X是先自增后引用,而X++是先引用后自增。解释完毕,求给分,全手打不容易。 参考技术A ++优于*
x=5,y=9。则z=y*x++=45,此时,x=6,y=9;
++x是自增1后相运算,而x++是运算后自加1。
希望对你有所帮助 参考技术B ++优先,
z=y*x++后,z=45.但运算得出z值后x自加1. 参考技术C 答案是45
++x是前缀自增运算,立即生效,没有运算延迟,如这道题改为z=y*++x,那么结果是z=9*6=54,也就是先自增变成x=6再运算z=9*6。
x++是后缀自增运算,延迟生效,有运算延迟,如这道题,z=y*x++,那么结果是z=9*5=45,也就是先运算z=9*5,之后x自增变成x=6,这个值在下一语句开始生效。 参考技术D 答案是45,*优先,++x是先运算后赋值,x++是先赋值后运算
java线程执行的优先级
1.1 线程的优先级
java 中的线程优先级的范围是1~10,默认的优先级是5。10极最高。
有时间片轮循机制。“高优先级线程”被分配CPU的概率高于“低优先级线程”。根据时间片轮循调度,所以能够并发执行。无论是是级别相同还是不同,线程调用都不会绝对按照优先级执行,每次执行结果都不一样,调度算法无规律可循,所以线程之间不能有先后依赖关系。
无时间片轮循机制时,高级别的线程优先执行,如果低级别的线程正在运行时,有高级别线程可运行状态,则会执行完低级别线程,再去执行高级别线程。如果低级别线程处于等待、睡眠、阻塞状态,或者调用yield()函数让当前运行线程回到可运行状态,以允许具有相同优先级或者高级别的其他线程获得运行机会。因此,使用yield()的目的是让相同优先级的线程之间能适当的轮转执行。但是,实际中无法保证yield()达到让步目的,因为让步的线程还有可能被线程调度程序再次选中。结论:yield()从未导致线程转到等待/睡眠/阻塞状态。在大多数情况下,yield()将导致线程从运行状态转到可运行状态,但有可能没有效果。
优先级测试程序:
package com.first;
public class ThreadPriority
{
public static void main(String[] args) {
System.out.println(Thread.currentThread().getName()
+"("+Thread.currentThread().getPriority()+ ")");
Thread t1=new ThreadP("thread1"); //
新建t1
Thread t2=new ThreadP("thread2"); //
新建t2
t1.setPriority(5); // 设置t1的优先级为1
t2.setPriority(5); // 设置t2的优先级为10
t1.start(); // 启动t1
t2.start(); // 启动t2
}
}
class ThreadP extends
Thread{
public ThreadP(String name) {
super(name);
}
public void run(){
for (int i=0; i<5; i++) {
System.out.println(Thread.currentThread().getName()
+"("+Thread.currentThread().getPriority()+ ")"
+", loop "+i);
}
}
}
运行结果如下:
main(5)
thread2(10), loop 0
thread1(1), loop 0
thread2(10), loop 1
thread2(10), loop 2
thread2(10), loop 3
thread2(10), loop 4
thread1(1), loop 1
thread1(1), loop 2
thread1(1), loop 3
thread1(1), loop 4
以上是关于java语言中,是++优先还是*优先?计算的优先顺序是?例:z=y*x++,其中x=5,y=9,答案是?还有,++x和x++的主要内容,如果未能解决你的问题,请参考以下文章
我可以在线程执行时更改线程的优先级。更改是发生还是os忽略它?(Java)
我想问下C语言里面,有个while(i++<7) 这个里面是先计算i++还是先判断i<7呢?还是搞不明白优先级了,求指教