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呢?还是搞不明白优先级了,求指教

在EXCEL提供的4类运算符中,优先级最高的是啥?

JAVA中的关系运算符的优先级是啥意思?还有逻辑运算符的优先级

Java程序设计基础——运算符优先级和表达式

Java程序设计基础——运算符优先级和表达式