Java中a+=b和a=a+b的区别
2015-09-02 09:43
381 查看
在Java语言中a+=b和a=a+b是有区别的,主要的区别是在运算时精度的问题,当然了-=、*=、/=,%=也都是一个道理。这里以a+=b和a=a+b为例做说明。
(1)下面以一段Java程序为例,试一试a+=b的形式:
public
classDemo
{
public
static void main(String[] args)
{
short a=4;
a+=5;
System.out.println(a);
}
}
![](http://img.blog.csdn.net/20150902094414822?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
可以看出这段程序的结果是9,程序没有问题的。需要明确的是“+=”这个运算符在Java中是一个运算符,而不是两个,程序在执行“+=”时,会自动向高精度进行数据类型转换。所以上面的程序在执行时编译器没有报错。
(2)下面试一试a=a+b的形式:
public
classDemo
{
public
static void main(String[] args)
{
short a=4;
a=a+5;
System.out.println(a);
}
}
![](http://img.blog.csdn.net/20150902094516610?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
可以从截图中看出在使用a=a+b的形式时出现了问题,因为a是short类型的变量,而5默认为int类型的变量,short类型+int类型结果肯定会自动转换成int类型啦,
此时就存在数据类型不一致的问题,用short类型的变量去保存int类型的变量编译器当然会报错了,就好比你用装一两水的杯子去装二两水,
当然是装不下的,如果你非要用装一两水的杯子去装二两水,肯定可以硬到进去,但是肯定会洒掉一部分水。所以如果这里非要用short类型的变量去装int类型的数据,可以用强制转换,确定是会丢失精度。
以下是强制转换后的结果:
public
classDemo
{
public
static void main(String[] args)
{
short a=4;
a=(short)(a+5);
System.out.println(a);
}
}
![](http://img.blog.csdn.net/20150902094745589?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
(3)总结一句,这两种形式的主要区别在于是否进行数据类型的自动转换,当两个操作数同类型时这两种形式的运算结果是没有差别的,当两个操作数数据类型不同时,
且左操作数即保存结果的操作数的数据精度要低,此时这两种形式才有区别。
(1)下面以一段Java程序为例,试一试a+=b的形式:
public
classDemo
{
public
static void main(String[] args)
{
short a=4;
a+=5;
System.out.println(a);
}
}
可以看出这段程序的结果是9,程序没有问题的。需要明确的是“+=”这个运算符在Java中是一个运算符,而不是两个,程序在执行“+=”时,会自动向高精度进行数据类型转换。所以上面的程序在执行时编译器没有报错。
(2)下面试一试a=a+b的形式:
public
classDemo
{
public
static void main(String[] args)
{
short a=4;
a=a+5;
System.out.println(a);
}
}
可以从截图中看出在使用a=a+b的形式时出现了问题,因为a是short类型的变量,而5默认为int类型的变量,short类型+int类型结果肯定会自动转换成int类型啦,
此时就存在数据类型不一致的问题,用short类型的变量去保存int类型的变量编译器当然会报错了,就好比你用装一两水的杯子去装二两水,
当然是装不下的,如果你非要用装一两水的杯子去装二两水,肯定可以硬到进去,但是肯定会洒掉一部分水。所以如果这里非要用short类型的变量去装int类型的数据,可以用强制转换,确定是会丢失精度。
以下是强制转换后的结果:
public
classDemo
{
public
static void main(String[] args)
{
short a=4;
a=(short)(a+5);
System.out.println(a);
}
}
(3)总结一句,这两种形式的主要区别在于是否进行数据类型的自动转换,当两个操作数同类型时这两种形式的运算结果是没有差别的,当两个操作数数据类型不同时,
且左操作数即保存结果的操作数的数据精度要低,此时这两种形式才有区别。
相关文章推荐
- fedora上安装sun jdk
- JAVA中的多线程操作 线程等待、阻塞、让步等
- Eclipse中使用正则表达式搜索替换
- 在Eclipse中Debug 显示source not found的解决方案
- eclipse质检插件
- eclipse插件卸载
- EasyUI 结合spring MVC上传图片以及验证图片是否符合规范
- Java____继承与组合
- java关闭流,解压缩后的清除
- Java删除文件夹和文件
- 打开Android studio遇到的一些问题,为什么安装jdk没有jdk.....的文件夹
- Java基础学习对象、封装第二章实验练习三
- java 基础学习对象、封装第二章练习二
- java 基础学习什么是对象第二章练习一
- Eclipse Configuration ButterKnife
- 2015.09.01 Java 学习笔记—内存分析精华
- Mybatis-spring基本配置
- Android开发效率—Eclipse快捷键
- Spring笔记――11.“零配置”支持
- java web session