tips: a=a+b 与 a+=b
前言:
我们在编码的时候, 经常会使用到 a 加上一个数或者加上一个字符串, 然后再赋值回给 a . 那么 a=a+b 和 a+=b是相同的么?
情景1:
a, b 类型相同, 且都为值类型
@Test
public void demo1() {
int a = 10;
int b = 11;
a = a + b;
System.out.println("a = a + b : " + a); a = 10;
a += b;
System.out.println("a += b : " + a);
}

情景2:
a,b 类型相同, 且都为引用类型:
@Test
public void demo2() {
String a = "a";
String b = "b";
a = a + b;
System.out.println("a = a + b : " + a); a = "a";
a += b;
System.out.println("a += b : " + a);
}

情景3:
a, b类型不同, 一个为值类型, 一个为字符串类型
@Test
public void demo3() {
String a = "a";
int b = 10;
a = a + b;
System.out.println("a = a + b : " + a); a = "a";
a += b;
System.out.println("a += b : " + a);
}

从上面看, 好像能得出结论, 没啥区别啊, 是把?
如果真是这样, 那么我试试 a,b都是值类型, 但是有效范围不同, 或者说长度不同. 看看是不是也是这样呢.
情景4:
a, b都是值类型,但是a长度小, b长度长
@Test
public void demo4() {
int a = 10;
long b = 10L;
a = a + b;
System.out.println("a = a + b : " + a); a = 10;
a += b;
System.out.println("a += b : " + a);
}
在编写的时候, 从编译器上, 已经能看到不同了.

尽管如此, 我还是运行一下看看.

报精度丢失错误, 因为 等号 要求两边的类型一致, 很明显, int + long , int 自动转为高精度数据long, 相当于 int = long + long , 这时候, 发现等号两边数据类型不一致啊, 怎么赋值啊.
这里其实就相当于写了 : int c = 10L;
看一下编译器怎么提示:

我们都知道 int -> long , 没有问题, 因为不会产生值失真. 但是如果把 long -> int , 是有可能产生 失真 的. 那电脑不能决定是否要给你截值, 除非我们手动告诉电脑, 我们就要这么玩.
int c = (int)10L;
我将a=a+b注释掉, 看看 a+=b行不行

运行成功了. 为啥 += 能成功呢?
从结果上看, += 肯定为我们做了类型转换, 否则也不会成功的. 最后给到精度小的值, 当然有溢出风险是肯定的.
tips: a=a+b 与 a+=b的更多相关文章
- Mac上MySQL忘记root密码且没有权限的处理办法&workbench的一些tips (转)
忘记Root密码肿么办 Mac上安装MySQL就不多说了,去mysql的官网上下载最新的mysql包以及workbench,先安装哪个影响都不大.如果你是第一次安装,在mysql安装完成之后,会弹出来 ...
- 【Tips】史上最全H1B问题合辑——保持H1B身份终级篇
[Tips]史上最全H1B问题合辑——保持H1B身份终级篇 2015-04-10留学小助手留学小助手 留学小助手 微信号 liuxue_xiaozhushou 功能介绍 提供最真实全面的留学干货,帮您 ...
- layer.js中layer.tips
<script src="~/Content/js/layer/layer.js"></script> layer.tips('名称不能为空', '#pro ...
- HTML 最简单的tips 怎么支持指定DIV显示提示信息
<body> <style type="text/css"> a.link{position:relative;} a.link div.tips{ bor ...
- CSS:CSS使用Tips
Css是前端开发中效果展现的主要部分之一,良好的Css书写习惯可以为实际的项目开发提高效率,也可以为实现良好的团队合作提供保证. 一般新手在使用Css的时候经常会犯一些错误,出现一些不经意的漏洞,如果 ...
- 【读书笔记】100个Switf必备tips
声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民伯伯: http://over140.cnblogs.com 正文 1.Selector 在Swi ...
- 【转】40个良好用户界面Tips
一个良好的用户界面应具有高转换率,并且易于使用.但要用户体验良好并不容易做到,下面我们整理了40个良好用户界面Tips,希望能对你有帮助! 1 尽量使用单列而不是多列布局 单列布局能够让对全局有更好的 ...
- 转:Eclipse Search Tips
from: https://github.com/ajermakovics/eclipse-instasearch/wiki/Eclipse-search-tips Eclipse Search T ...
- VS:101 Visual Studio 2010 Tips
101 Visual Studio 2010 Tips Tip #1 How to not accidentally copy a blank line TO – Text Editor ...
- [css 揭秘]-css coding tips
css 揭秘之css coding tips demo(1) html 代码: <body> <section> <div class="demo1" ...
随机推荐
- (树)Subtrees -- hdu -- 5524
http://acm.hdu.edu.cn/showproblem.php?pid=5524 Subtrees Time Limit: 2000/1000 MS (Java/Others) Me ...
- java基本语法、标识符、关键字
基本语法 编写Java程序时,应注意以下几点: 大小写敏感:Java是大小写敏感的,这就意味着标识符Hello与hello是不同的. 类名:对于所有的类来说,类名的首字母应该大写.如果类名由若干单词组 ...
- protobuf和protostuff的区别
在我们的开发过程中,序列化是经常需要处理的问题,比如在做分布式访问数据时,或者是在做redis缓存存储数据时,如果我们涉及的知识面不够广的话,可能会简单的使用JDK的序列化,也即在需要序列化的类上im ...
- gradle构建工具入门
实际设置:系统变量新建: PATH新加: 查看是否安装成功:
- js-数组面试题
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> & ...
- Android-xliff
先看以下这个案例,然后在分析: string.xml 使用xliff,需要导入命名空间 xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2& ...
- Kali Linux渗透测试实战 1.3 渗透测试的一般化流程
1.3 渗透测试的一般化流程 凡事预则立,不预则废,做任何事情都要有一个预先的计划.渗透测试作为测试学科的一个分支,早已形成了完整的方法论.在正式开始本书的实践教学章节之前,我也想谈一谈使用Kali ...
- sql server 字符串分割函数
),)) )) as begin ) set @SourceSql=@SourceSql+@StrSeprate while(@SourceSql<>'') begin )) insert ...
- Linux系统软件包的管理(4)
虽然使用源码编译安装可以具有提高速度个性化的定制等优点,但对于 Linux发行商来说,则不容易管理软件包,毕竟不是每个人都会进行源码编译的,如果能够将软件预先在相同的硬体与系统上面编译好在发布的话,不 ...
- word2vec的原理(一)
最近上了公司的新员工基础培训课,又对NLP重新产生的兴趣.NLP的第一步大家知道的就是不停的写正则,那个以前学的还可以就不看了.接着就是我们在把NLP的词料在传入神经网络之前的一个预处理,最经典的就是 ...