好办法牢记前缀++(--)与后缀++(--)执行顺序

11 篇文章 0 订阅

前缀++(--)和后缀++(--)引无数程序员竞折腰。虽然实际项目中由于程序员的自我修养,不会对++或--写出让人晦涩难懂的代码,但是在面试笔试的时候,一些“无聊的”企业总会拿这个来刁难我们。例如对于下面一个题目:

int a = 4; //分别执行以下五种情况

(1) a += a++; //a=?

(2) a += ++a; //a=?

(3) ++a += a; //a=?

(4) ++a += a++; //a=?

(5) ++a += ++a; //a=?

相信很多人对这个问题都会头大。没办法,兵来将挡,水来土掩,我们必须找个办法来应付此类题目。

大家都知道,a++表示先返回a的值,然后再对a执行+1操作,++a表示先对a执行+1操作,然后再返回a的值(此时a是加1后的值了)。这样单独容易理解。但是再加上+=等操作符,可能就不会那么明朗了(如上题中的(3)、(4)、(5)小问)。

一个很好的记忆方法:

(1)前缀++a(或--a)的优先级大于所有数值运算符

(2)后缀a++(或a--)的优先级小于所有数值运算符

牢记这个,就不会出错啦。例如对上面的例子:

(1) a += a++;

后缀++的优先级小于+=的优先级,因此先执行a+=a的操作,得8,然后再执行a++的操作,结果为9

(2) a += ++a;

前缀++的优先级大于+=的优先级,因此先执行++a的操作,得5,然后再执行a+=a的操作,结果为10

(3) ++a += a;

前缀++的优先级大于+=的优先级,因此先执行++a的操作,得5,然后再执行a+=a的操作,结果为10

(4) ++a += a++;

优先级:前缀++ > += > 后缀++,先执行++a得5,然后执行a+=a得10,最后执行a++得11

(5) ++a += ++a;

对于同时前缀的,顺序是从左往右,因此先执行左边的++a得5,然后执行右边的++a得6,最后执行a+=a得12


有人说不同编译器结果可能不一样,我在vs中结果如上。

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要删除`--add-opens`选项,您可以执行以下步骤: 1. 打开您的Java应用程序的启动脚本或命令行。 2. 查找和删除包含`--add-opens`选项的行。 3. 如果您使用的是IDE,例如Eclipse或IntelliJ IDEA,您可以在项目的运行配置中找到并删除该选项。 请注意,`--add-opens`选项是为了解决在使用Java 9或更高版本时遇到的模块化系统问题而引入的,因此如果您的应用程序依赖于模块化系统,则删除该选项可能会导致应用程序无法正常运行。 ### 回答2: 要删除--add-opens可以按照以下步骤进行操作: 1. 打开命令提示符或终端窗口。 2. 输入以下命令以找到正在运行的Java进程: ``` jps -l ``` 3. 根据输出结果,找到正在运行的Java进程的进程号(PID)。 4. 输入以下命令以查看Java进程的详细信息: ``` jcmd <PID> VM.command_line ``` 其中,<PID>是Java进程的进程号。 5. 在输出结果中查找是否存在--add-opens参数。如果存在,则说明该参数被使用。 6. 如果确实存在--add-opens参数,可以选择两种方法之一来删除它: 方法一:重启Java进程,并在启动时不使用--add-opens参数。 方法二:使用jcmd命令来重新设置Java进程的启动参数,不包括--add-opens参数。具体命令如下: ``` jcmd <PID> VM.set_command_line <新的启动参数> ``` 其中,<PID>是Java进程的进程号,<新的启动参数>是不包括--add-opens参数的Java进程启动命令。 7. 删除--add-opens参数后,Java进程将以新的启动参数重新启动,不再包含该参数。 请注意,在执行任何操作之前,请确保您了解并理解对Java进程进行更改所可能产生的影响,并确保备份重要数据。 ### 回答3: "add-opens"是Java 9及以上版本中引入的一项功能,用于解决使用反射时出现的模块访问限制问题。在某些情况下,我们可能需要删除这个"add-opens"选项。 要删除"add-opens",我们按照以下步骤进行操作: 1. 升级Java版本:首先,我们需要确保我们使用的Java版本是9或以上。如果使用的是低于Java 9的版本,则没有"add-opens"这个选项,也不需要删除它。 2. 检查代码:仔细检查我们的代码并确定是否真正需要删除"add-opens"。"add-opens"选项通常被用于解决访问限制问题,如果删除该选项可能会导致代码无法编译或出现运行时错误。因此,在删除之前,我们需要确保代码不会受到任何负面影响。 3. 重新设计代码:如果我们在之前的步骤中确定确实需要删除"add-opens",那么我们需要重新设计代码,使其不再依赖于反射访问限制。一种常用的方法是使用新的Java模块系统,将代码模块化并使用模块导出和模块访问控制来管理访问权限。 使用新的Java模块系统可以提高代码的可维护性和安全性,并使其与Java开发社区保持同步。所以,即使删除了"add-opens"选项,我们建议使用新的Java模块系统来管理代码之间的访问权限。 总之,删除"add-opens"选项需要确保我们的代码不再依赖于使用反射访问受限模块的功能。这可能需要进行代码重构或使用新的Java模块系统来重新设计代码。要删除"add-opens"选项,我们应该牢记代码的可维护性和安全性,并确保与Java开发社区保持同步。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值