在Java中,关于a=a+b与a+=b的区别「建议收藏」

在Java中,关于a=a+b与a+=b的区别「建议收藏」在Java中,关于a=a+b与a+=b的区别

大家好,又见面了,我是你们的朋友全栈君。

就单纯的执行这两条语句,不考虑编译器的优化的话,a=a+b的执行效率是低于a+=b的,因为它多进行了一步中间变量的操作,而且会多占用一个变量的空间。而Java编译器默认对其进行了优化,优化之后两条语句都当做 a+=b来执行了,所以实际上是没有任何却别的。

 

其次说一下有关类型转换的区别。

public class Test {
 
 public static void main(String[] args){
  int a = 2;
  float b = 6;
  a+=b; //right
//  a=a+b; //error
  a=(int) (a+b); //right
 }
}

当使用a=a+b的时候,会抛出”Exception in thread “main” java.lang.Error: Unresolved compilation problem: Type mismatch: cannot convert from float to int“的异常,这是可以理解的,如果不使用(int)强制类型转换的话,float 是不能直接复值给int 变量的

即a+=b进行了强制类型转换,和 a=(int)((float)a+b)是等价的!

原因:在Java中,在基本类型进行算术运算的时候,会发生小字节类型向大字节类型转换的现象。如图中 int 类型和float类型进行加法运算时会将 a 先转换为float类型,然后再和b相加。这样结果类型变成了float类型,如果这时候试图把float类型赋值给a时便会抛异常。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/106054.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • maven报错was cached in the local repository, resolution will not be reattempted until the update inter

    maven报错was cached in the local repository, resolution will not be reattempted until the update inter

  • 医疗器械进销存软件管理系统_简单仓库管理系统

    医疗器械进销存软件管理系统_简单仓库管理系统开发环境:Eclipse/MyEclipse、Tomcat8、Jdk1.8数据库:MySQL适用于:课程设计,毕业设计,学习等等系统介绍有偿

  • NAS备份, NDMP

    NAS备份, NDMP

  • rsyslog接收远程日志_rsyslog接收远程日志

    rsyslog接收远程日志_rsyslog接收远程日志在另外一种环境中,让我们假定你已经在机器上安装了一个名为“foobar”的应用程序,它会在/var/log下生成foobar.log日志文件。现在,你想要将它的日志定向到rsyslog服务器,这可以通过像下面这样在rsyslog配置文件中加载imfile模块来实现。首先,加载imfile模块,这只需做一次。module(load=”imfile”PollingInterval=”5″)然后,指定…

  • mybatis分页sql语句_MySQL 分页查询

    mybatis分页sql语句_MySQL 分页查询Mybatis可以使用RowBounds进行分页dao层sql的xml文件,因为是java层面的分页,所以sql不需要分页单元测试因为参数是第几个开始,这样很不友好,我们一般情况分页是第几页开始,页大小是多少,所以这就需要我们自己封装一层分页对象packagecom.lingaolu.utils;importorg.apache.ibatis.session.RowBounds;/***@author林高禄*@create.

  • 嵌入式学习计划

    嵌入式学习计划从今天开始,我要正式的学习关于嵌入式。初步的计划是,选择一款嵌入式Linux系统进行学习,目前选用的FreeRTOS设备,通过查询博客,阅读源码,看书方式进行全面的了解。其次,还要选择一款嵌入式设备进行实战,鉴于目前手头刚好有一台STM32F107VCT6,就选择它了,而且STM32F10x系列的设备资料也比较齐全。对于嵌入式设备的学习路线,首先学习使用固件库进行编程,学习的内容包括uart,flash,gpio等相关的内容,同时辅之以数字电子基础书籍进行更深入的了解。再都了解了之后,将FreeRT

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号