莫衷一是——i+++j 该如何计算?

探讨了在Java中连续使用++运算符时的结合性问题,并通过实例解释了编译器如何根据贪心规则解析这些运算符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  这是一个有趣的计算, 3 个加号相连。那么,到底是如何结合的呢?是按照: i + (++j)来运算,还是按照(i++) + j 来运算呢?

  这个问题在类似于 C / C++中讨论是没有多大意义的,因为 C / C++依赖于实现的硬件结构,不同的环境结果也会不同。不过在 Java 中,这个结果是固定的,不受其运行的硬件环境与平台所影响。

  到底按照什么顺序运算呢,写个程序来测试下吧。

  【例】++的结合
 这里写图片描述

  如果结合为:
  这里写图片描述

  则 j 的值会加 1,结果 k 的值为 31。程序运行结果如下:
  这里写图片描述

  从结果可知,结合的顺序为前者,也就是说
  这里写图片描述

  相当于:
这里写图片描述
  为了更加清晰,这里使用括号。

  贪心规则

  这种结合性要归根于编译器的贪心规则,也就是说,在分析符号的时候,编译器会尽可能多地结合有效的符号,例如上面的表达式:
这里写图片描述
  “ +”与“ ++”都是有效的符号,但是“ +++”不是有效的符号,因此,经过分析后,最终将表达式解析为:
这里写图片描述
  不过,编译器极度“贪心”,其只管尽可能多地结合有效的符号,而不管这样结合是否符合语法的规则,例如表达式:
这里写图片描述
  本来,我们的原意是 a 减去−b,即:
这里写图片描述
  但是,如果之间不使用空格(或其他符合语法规则的空白分隔符)或括号进行分隔,经过分析之后,因为符号“ –”是有效的符号,所以会组合在一起,这样结构就划分为:
这里写图片描述
  这当然不符合语法规则,所以,编译器也会无情地产生了编译错误。

  为何贪心

  也许读者会问:为什么要使用这种贪心的方式来分析字符呢?这样有什么好处呢?相信看过下面的例子,你就会明白了。

  【例】 贪心的解释。
这里写图片描述
  程序就是输出若干个八进制转义字符而已,貌似与贪心规则根本没有关系。如果这样想的话,那你错了,请看运行结果:
这里写图片描述
  想想看, 为什么 String 对象 “ \17”的长度为 1,“ \171”的长度也为 1 呢?还有, 为什么 “ \171”不打印出“ \17”的转义字符“ ”并与“ 1”连接成:
这里写图片描述
  而是打印出:
这里写图片描述
  呢?那就是因为贪心规则,编译器会尽可能多地对有效字符进行结合,否则转义字符将失去作用。对于“ \1717”与“ \431”,会按两个字符来处理,因为这两个数值都超过了八进制转义字符的取值范围( \0~\377),因此,“ \1717”会解析为“ \171”与“ 7”,重点内容而“ \431”会解析为“ \43”与“ 1”。

  总结:

  编译器在分析字符时,会尽可能多地结合有效字符。并且“过度”地贪心,而不管这种结合方式是否符合语法规则。

  贪心规则是有用的,因为这样可以对转义字符等进行特殊处理。
  
  
本文出自柠檬派http://www.lemonpai.com 请务必保留此出处 ,否则将追究法律责任!

co-authorship,指的是两个或者多个作者共同完成一篇论文、一本书籍或者一项研究等。在学术研究领域,co-authorship已经成为一种很常见的现象。在很多学科领域的研究中,一篇论文、一本书籍或者一项研究都需要多个研究者的智慧与经验的贡献,因此有很多研究者选择和他人共同完成研究项目。 对于科研工作者来说,与他人共同完成研究项目可以带来很多好处。首先,多个研究者跨学科、跨机构的合作可以扩大研究的范围和深度,提高研究的质量。其次,每个研究者都有其独特的专业知识和技能,可以在不同方面给研究项目带来更多的价值。第三,合作研究可以促进交流和合作,形成更紧密的学术社区。 然而,co-authorship也存在一些问题和挑战。其中最常见的问题是作者之间的合作莫衷一是、工作量分配不均等。有时候,一些作者可能会更好的宣传这篇论文、甚至会因此得到更多的奖励或者职位晋升机会。此外,co-authorship也面临着研究成果的比例分配问题,即各位作者之间如何公平地享用研究成果。为了解决这些问题,许多研究组织和学术期刊都制定了严格的合作规定和分配标准。 总的来说,co-authorship是学术研究中必不可少的一环,可以通过对不同的研究者的不同贡献来扩大研究成果的价值和影响。然而,合作中存在的问题需要通过严密的管理和分配规定来解决。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值