k*(++k);中()里面的内容为什么没有先算

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呢?
...全文
6336 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Python小叮当 2020-10-23
  • 打赏
  • 举报
回复 1
引用 5 楼 qybao的回复:
这你的括号优先级没关系,是双目运算的执行顺序。表达式1*表达式2,要理解什么是表达式的值。
先执行 表达式1的值=k的值(临时变量)=2 入栈,等待被双目运算操作
再执行 表达式2的值=自增后的k的值(临时变量)=3 入栈,等待被双目运算操作
然后双目运算执行,两个操作数出栈进行操作,出栈时的值就是入栈时的值,所以是 2*3 = 6
赞同这个说法
  • 打赏
  • 举报
回复
++k是叫做前置运算,先把k加了1,在去进行这一行的运算,反之k++,先进行运算把值传给等号左边的变量,再把k加了一
诡谷 2020-09-22
  • 打赏
  • 举报
回复
引用 楼主 一个月只能修改一次 。的回复:
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呢?
学一下C语言你就懂了
  • 打赏
  • 举报
回复
知道了,表达式运算时先从左到右把值取到操作数栈,取值的时候就会计算自增自减,然后按运算优先级计算操作数栈里取到的值。
  • 打赏
  • 举报
回复
引用 4 楼 icoolno1的回复:
已经优先啦,否则结果是4啊。表达式是个栈啊,先把2压进去,再把*号压进,再++k的结果压进去,最后不就是6么。
还没学到栈,没听懂呢
qybao 2020-09-20
  • 打赏
  • 举报
回复
这你的括号优先级没关系,是双目运算的执行顺序。表达式1*表达式2,要理解什么是表达式的值。
先执行 表达式1的值=k的值(临时变量)=2 入栈,等待被双目运算操作
再执行 表达式2的值=自增后的k的值(临时变量)=3 入栈,等待被双目运算操作
然后双目运算执行,两个操作数出栈进行操作,出栈时的值就是入栈时的值,所以是 2*3 = 6


八爻老骥 2020-09-20
  • 打赏
  • 举报
回复
已经优先啦,否则结果是4啊。表达式是个栈啊,先把2压进去,再把*号压进,再++k的结果压进去,最后不就是6么。
  • 打赏
  • 举报
回复
引用 2 楼 鬼爵士的回复:
k,你已经赋值2,然后k应该是输出6 程序代码一般是从第一行到最后一行,一行一行的执行的
为什么结果会是6呢?不是应该先算++k把k的值变为3,然后3*3=9吗
诡谷 2020-09-19
  • 打赏
  • 举报
回复
k,你已经赋值2,然后k应该是输出6 程序代码一般是从第一行到最后一行,一行一行的执行的
  • 打赏
  • 举报
回复
没有人吗。。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧