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" ...
随机推荐
- (转)使用 vs.php 调试PHP
转自:http://www.jb51.net/article/24618.htm 早先在asp横行的年代,php和asp一样,大都都是html中夹杂代码,说实话,这时候IDE的确用处不是很大,倒是 ...
- Android多线程操作sqlite(Sqlite解决database locked问题)(2)使用事务处理的效果
问题场景描述: 在页面中用到了ViewPager控件,ViewPager中的内容分别是两个ListView,两个ListView的数据都来自本地数据库(先从网络下载数据,然后更新本地数据库),在实际的 ...
- ES基本查询
数据准备 # 创建索引PUT /lib1{ "settings": { "number_of_shards": 5 , "number_o ...
- 区间DP石子合并问题 & 四边形不等式优化
入门区间DP,第一个问题就是线性的规模小的石子合并问题 dp数组的含义是第i堆到第j堆进行合并的最优值 就是说dp[i][j]可以由dp[i][k]和dp[k+1][j]转移过来 状态转移方程 dp[ ...
- Android-Failed to open zip file
当AndroidStudio加载工程的时候,出现以下错误❌: 解决前的工程目录: 1.将以上错误认真的分析: 2.找到工程的 gradle文件夹/wrapper文件夹/gradle-wrapper.p ...
- Android-Java单例模式
今天我们来说说一个非常常用的模式,单例模式,单例模式让某个类中有自己的实例,而且只实例化一次,避免重复实例化,单例模式让某个类提供了全局唯一访问点,如果某个类被其他对象频繁使用,就可以考虑单例模式,以 ...
- 如何把jar包发布到maven私服
1.格式 mvn deploy:deploy-file -DgroupId=com.qiyi -DartifactId=sphinx -Dversion=1.0 -Dpackaging=jar -Df ...
- Web应用安全之Response Header里的敏感信息
Web应用安全之Response Header 文/玄魂 目录 Web应用安全之Response Header 前言 1.1 那些敏感的header 1.2 删除敏感的header 1.2.1 删除 ...
- 如何在C#中引入CPLEX的dll(CPLEX系列-教程一)
以前写在CSDN上的文章.转到博客园之后,打算把这个教程移过来,顺便完善后面的教程.主要是在Asp.Net+EF6里面使用cplex,完成一个最优生产计划的决策.当时在查找如何在C#中引用cplex时 ...
- 如何获取SQL中Print语句输出内容
SqlConnection cn = new SqlConnection("server=my\\my2005;database=rdwhdata2005;user id=zjh;passw ...