这你的括号优先级没关系,是双目运算的执行顺序。表达式1*表达式2,要理解什么是表达式的值。 先执行 表达式1的值=k的值(临时变量)=2 入栈,等待被双目运算操作 再执行 表达式2的值=自增后的k的值(临时变量)=3 入栈,等待被双目运算操作 然后双目运算执行,两个操作数出栈进行操作,出栈时的值就是入栈时的值,所以是 2*3 = 6
class Test01{ public static void main(String[] args){ int k = 2; //k *= ++k; k=k*(++k); System.out.println(k); } } 这段运行的结果是:6. 也就是先算了k的值“2”,再算++k的值“3”,然后2*3得到6. 但是()不是优先级更高吗,为什么没有先算()里的++k呢?
已经优先啦,否则结果是4啊。表达式是个栈啊,先把2压进去,再把*号压进,再++k的结果压进去,最后不就是6么。
k,你已经赋值2,然后k应该是输出6 程序代码一般是从第一行到最后一行,一行一行的执行的
62,614
社区成员
307,327
社区内容
加载中
试试用AI创作助手写篇文章吧