在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时便会抛异常。

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Win10安装程序修复计算机,directx修复工具win10最新版

    Win10安装程序修复计算机,directx修复工具win10最新版directx修复工具win10最新版是一款以排除电脑软件异常导致的无法正常使用问题而特别打造的优质工具。全自动的智能检测修复功能能够确保用户们因为程序问题而导致的电脑异常无法使用都得到解决。directx修复工具win10最新版功能1、Directx修复增强版是一个系统DirectX组件修复工具,主要用于检测当前系统的DirectX状态。2、发现异常就进行修复。DirectX修复工具可以完美解决…

    2022年6月6日
    26
  • oracle连接出现ora-12154,与虚拟机Oracle连接出现ora-12154问题的解决方法

    oracle连接出现ora-12154,与虚拟机Oracle连接出现ora-12154问题的解决方法谈到ora-12154问题,网上有一大堆解决方法,原因基本统一:tns或listener配置不正确。对于listener配置不正确的一般较少发生,大多数人都是按照默认配置一路“下一步”过来的,基本都是orcl的服务名,如果说本地可以连通orcl,别的机子就连不通那应该跟listener关系不大。大部分都是tns配置不正确。我遇到的现象是:在本机建了一个2003的虚拟机,虚拟机里面装了oracle1…

    2022年7月19日
    12
  • java getclassloader_java-关于getClass().getClassLoader()

    java getclassloader_java-关于getClass().getClassLoader()InputStreamis=getClass().getClassLoader().getResourceAsStream(“helloworld.properties”);中getClass()和getClassLoader()都是什么意思呀.getClass():取得当前对象所属的Class对象getClassLoader():取得该Class对象的类装载器类装载器负责从Java字符文件…

    2022年5月2日
    37
  • win32 api函数_c调用webapi接口

    win32 api函数_c调用webapi接口前言如果要在Windows上面写程序,就不得不了解一些Win32Api的使用,Win32Api在C/C++的环境中使用非常的方便,直接调用头文件<Windows.h>使用就行了,但在C#中不会这么简单,需要在指定的模块之中导入想要的Win32,下面我们来学习一下如何在C#之中使用Win32Api…在测试Win32Api之前,我先教大家如何获取有窗口的进程信息,代码如下:有窗口的进程,它的窗口句柄不会为0,所以我们只需在所有运行的程序之中判断一.

    2022年10月11日
    0
  • 求两个向量的夹角_数量积和向量积的公式

    求两个向量的夹角_数量积和向量积的公式如图所示,我们要计算任意两个向量之间的夹角。(图中的坐标数字是估计值,随手给定)python代码如下importmathAB=[1,-3,5,-1]CD=[4,1,4.5,4.5]EF=[2,5,-2,6]PQ=[-3,-4,1,-6]defangle(v1,v2):dx1=v1[2]-v1[0]dy1=v1[3]-v1[1]dx2=v2[2]-v2[…

    2022年9月25日
    0
  • stm32f103c8t6电压采集adc_ADC电压采样显示

    stm32f103c8t6电压采集adc_ADC电压采样显示STM32F103+ADC采集实时电压+LCD1602A显示前言代码前言刚开始学习STM32,用的是开发板是野火的指南者,这款板子网上资源很多。在学习ADC和LCD部分时,想利用手头仅有的LCD1602A进行显示电压,经过不断调试后,就有如下代码。代码main.c//Anhighlightedblockvarfoo=’bar’;…

    2022年9月22日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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