两小无猜的爱恨情仇--java =+和+=揭秘

故事背景

  当一个人问另一个人“敢不敢”的时候,另一个人必须说“敢”,这就是游戏的规则。小男孩朱利安和小女孩苏菲的相遇即开始于这样一场孩童的闹剧,一个精美的铁盒子就是他们游戏的见证。说脏话,扰乱课堂,在校长室小便,内衣外穿,一个游戏两人一玩十多年,他们什么都敢,除了承认彼此相爱。

苏菲(玛丽昂·歌迪亚饰)提议两人分别十年,挑战的内容是朱利安(吉约姆·卡内饰)敢不敢伤害苏菲。恍惚十年逝去,朱利安找到苏菲,为了游戏的进行他决定另娶她人,邀请苏菲做伴娘。受到伤害的苏菲在朱利安的婚礼上抛出铁盒子“你敢悔婚么?”原本最最亲密的朋友相互伤害最深。同样心痛的两个人相约再次分别十年。

十年里,朱利安拥有了一切,家庭、事业、朋友,只是没了苏菲宛如没了心,原来丧失激情的生活这般索然无味。

终于十年过去,“Love me, if you dare...”。

java =+和+=揭秘

java有两对关系密切的对象,=+和+=,许多程序员都会认为表达式(x += i)只是表达式(x =x + i)的简写方式,真的是这样吗?请看程序:

 public static void main(String[] args) {
 short x = 0;
 int i = 123456;
 x += i;
 System.out.println(x);
 }

这个程序的结果是什么?

运行后结果是:

-7616

不急,来看下面的程序:

    public static void main(String[] args) {
        short x = 0;
        int i = 123456;
        i =x + i;
        System.out.println(i);
    }

结果如我们预期:

123456

探究原因

在jsl15.26中定义,=是简单的赋值表达式,+=是复杂的赋值表达式,其中+=表达式满足规则:A compound assignment expression of the form E1 op= E2 is equivalent to E1 = (T) ((E1) op (E2)), where T is the type of E1, except that E1 is evaluated only once.

(复合赋值操作符包括 +=、-=、*=、/=、%=、<<=、>>=、>>>=、&=、^=和|=)Java 语言规范中讲到,复合赋值 E1 op= E2 等价于简单赋值E1 =(T)((E1)op(E2)),其中T 是E1 的类型,除非E1 只被计算一次。

举例如下:

short x = 3;
x += 4.6;

等同于

short x = 3;
x = (short)(x + 4.6);

分析例一

 short x = 0;
 int i = 123456;
 x += i;

等同于

 short x = 0;
 int i = 123456;
 x =(short)(x+ i);

第一步,x+i结果是int,第二步是int转short是窄化,会丢失精度。得到-7616就可以理解了

分析例二

        short x = 0;
        int i = 123456;
        i =x + i;

i是int类型,x是short类型,如果是x=x+i编译不能通过,报错:

Type mismatch: cannot convert from int to short

如果使用i=x+i则没有问题,结果为12345

参考资料

【1】https://baike.baidu.com/item/%E4%B8%A4%E5%B0%8F%E6%97%A0%E7%8C%9C/1674468

【2】https://docs.oracle.com/javase/specs/jls/se12/html/jls-15.html#jls-15.26

【3】java解惑

原文地址:https://www.cnblogs.com/davidwang456/p/11643522.html

时间: 2024-10-30 21:05:52

两小无猜的爱恨情仇--java =+和+=揭秘的相关文章

js 爱恨情仇说 this

原文:js 爱恨情仇说 this this 相信大家在写代码的时候都会遇到,可是怎么样才能用好this,估计这个还是有点困难的,虽然你有时候你会用到,但是他所在的具体的几个场景中所代表的是什么意思了?可能这个你就不是很清楚啊.这个就会在你使用的过程中出现很多的问题,于是今天我们来总结一下this,到底这个this?他真的有想象中的那么难吗? 其实可以总结为一句话:this指的是调用函数的那个对象 于是我们可以总结出this的四个调用场景: (1) 方法模式:简单的说就是使用点表达式或是下标表达式

产品经理和程序员的爱恨情仇

产品经理跪求程序员,程序员跪求程序成功上线! 前几天纯银V在微博上发了一条微博「很多人吐槽“人人都是产品经理”这句话,其实在我看来,这句话的正确理解是“人人都应该学习产品经理的思维方式,来提升自己的专业能力”,不知道作者是否本意如此.当然,实际上它容易被理解为“我也可以做产品经理,创造一个伟大的产品”,那就很扯淡了.尤其水货产品经理的破坏力之强令人惊叹」,引发了诸多讨论. 我看了之后,意味深长的转发了一下:从来没人说人人都是程序员,这其实说明了一些什么……于是又引发了一番热议,比如: 对呀,也不

初识angular.js之爱恨情仇

angular.js Angular.JS 是一组用来开发Web页面的框架.模板以及数据绑定和丰富UI组件.它支持整个开发进程,提供web应用的架构,无需进行手工DOM操作. AngularJS很小,只有60K,兼容主流浏览器,与 jQuery 配合良好. 简单概括:MV*模型的js框架 angular.js之爱恨情仇 爱恋之际 MV*模式 职责清晰.层次分明,例如页面样式变化仅改变View代码,其它层次结构代码无需改动. 数据绑定 数据视图绑定(单.双向数据绑定),无需反锁的改变DOM的值或修

Menu与ActionBar的爱恨情仇

最近在开发一款音乐播放器,在开发过程中遇到了一点小麻烦,通过android API搞清楚了Menu与ActionBar的爱恨情仇,写了个小Demo祭奠一下那些年我们陷进去的坑,有不对的地方请大神们批评指正. 一.Android系统里的菜单接口(即Menu接口),它是一个父接口,其下又有两个子接口:SubMenu(子菜单)与ContextMenu(上下文菜单) 常用的菜单有以下三类:Option Menu(选项菜单,常与ActionBar连用),Context Menue(上下文菜单),Popup

web移动端fixed布局和input等表单的爱恨情仇 - 终极BUG,完美解决

[问题]移动端开发,ios下当fixed属性和输入框input(这里不限于input,只要可以调用移动端输入法的都包括,如:textarea.HTML5中contenteditable等),同时存在的时候:两位大侠瞬间发生剧烈的化学反应,出现各种奇葩问题,见下图: [结论]输入框position属性值不是fixed,而变成了absolute [出现情况]当我们唤起键盘的时候,输入框位置不再页面最下面,或者说页面当时还可以继续往下滚动,再或者页面没有滚动到最下边,这个时候就会出现上面的问题 [学习

那些年苹果与 USB 的爱恨情仇

喜新厌旧,人之常情,也是大公司常态. 大公司见异思迁的背后,往往都由利益推动.即使是一个小小的接口,背后都是博弈.像苹果这么傲娇的公司,更是把和USB接口的爱恨情仇演绎得淋漓尽致. 当年,他们曾经是在一起的. 最初Mac和搭载Windows PC的共同接口很少.比如,PC上打印机的接口是并行接口,鼠标和键盘接口是PS/2接口:Mac上的硬盘接口是SCSI接口,鼠标和键盘接口是ADB接口.即使是在调制解调器和外设接口方面,双方都是用的不同接口. 当时的Mac濒临死亡,完全不占优.1998年苹果推出

永和和红薯不得不说的爱恨情仇!

在 2014 年 12 月 24 日这一天下午,@叶秀兰童鞋无意中吐槽了一下自己的毁容事迹,结果,引发出了永和和红薯之间的爱恨情仇,OSCer 们实在是太有才,请慢慢欣赏,如有遗漏,请@小小编辑  告知一二,补上! @叶秀兰:最近毁容部分已经结痂.中午吃完饭,@永和   童鞋不经意的说了一句,你嘴没擦干净... @纠结名字 :@永和  心里想:终于有机会表现了,我要帮她擦嘴.但@叶秀兰  内心一紧,心想:毁容的事被他发现了!眉头一皱,大喊:走开! @chameleon :@永和  恁的一惊,这女

对json的爱恨情仇

本文回想了对json的爱恨情仇. C++有风险,使用需慎重. 本文相关代码在:http://download.csdn.net/detail/baihacker/7862785 当中的測试数据不在里面,由于这是项目开发中用到的,须要保密. 在工作时才接触json,看过简单介绍,语法简单,易于扩展,用起来是非常爽的事.和后端的一些交互也基本上都是用的json.在项目中用了第三方库:simple json,用起来也不亦乐乎.只是也吃过该库的亏: 1.忘了解析后的JSONValue应该delete掉;

一起聊一聊小程序的爱恨情仇

背景 在移动互联网时代,Google和苹果两大巨头推出的Android和ios以及迅雷不及掩耳之势挤掉了曾经的移动端老大哥--诺基亚,然后刮起了pc端到移动端的大浪潮,我也有幸参与到了这次"技术革命"中,在传统的APP时代,每项需求都需要安装APP,越来越多的APP应用即将占满手机存储空间,那么有没有一种软件架构既不需要下载安装,又能够提供像客户端一样流畅友好的用户体验呢?答案是没有的,不过能不能做到接近原生的体验,而又解决不用装更多app的烦恼呢.这类方案中诸如google的PWA(