JAVA中a+=b和a=a+b的区别

一、 a+=b和a=a+b的区别

public classDemo
{
    public static void  main(String[] args)
    {
        short a=4;
        a+=5;
        System.out.println(a);
    }
}

程序运行结果是9,+=在java中是一个运算符,两个操作数使用运算符执行操作时候,如果类型不一致,则向高精度类型转换,当然没问题。(int比short精度高)

public classDemo
{
    public static void  main(String[] args)
    {
        short a=4;
        a=a+5;(a是short,5是int,【a+5】a自动转换成高精度int,{【a+5】=9,9是int类型},shrot a = int 9报错)
        System.out.println(a);
    }
}

这段代码编译会报错,因为a+5,a和5的类型不一致,会使short转到int类型,然后把int赋值给精度比自己低的变量会报错。
总之,当类型不一致时,a+=b和a=a+b有区别,当类型一致时,他们没什么区别。

a -=b和a = a-b同理

精度

1、
基本类型:short 二进制位数:16
包装类:java.lang.Short
最小值:Short.MIN_VALUE=-32768 (-2的15此方)
最大值:Short.MAX_VALUE=32767 (2的15次方-1)
2、
基本类型:int 二进制位数:32
包装类:java.lang.Integer
最小值:Integer.MIN_VALUE= -2147483648 (-2的31次方)
最大值:Integer.MAX_VALUE= 2147483647 (2的31次方-1)
3、
基本类型:long 二进制位数:64
包装类:java.lang.Long
最小值:Long.MIN_VALUE=-9223372036854775808 (-2的63次方)
最大值:Long.MAX_VALUE=9223372036854775807 (2的63次方-1)
4、
基本类型:float 二进制位数:32
包装类:java.lang.Float
最小值:Float.MIN_VALUE=1.4E-45 (2的-149次方)
最大值:Float.MAX_VALUE=3.4028235E38 (2的128次方-1)
5、
基本类型:double 二进制位数:64
包装类:java.lang.Double
最小值:Double.MIN_VALUE=4.9E-324 (2的-1074次方)
最大值:Double.MAX_VALUE=1.7976931348623157E308 (2的1024次方-1)

二、a++和++a的区别

在这里插入图片描述

答案是9和11

  • i++这个运算符是先参与运算然后自身的值再自加1
  • ++i这个运算符是先自加1然后再参与运算

    首先分析一下上面代码的执行流程,第一句输出语句输出的是i++根据我们刚才说的原理,它应该是先参与运算,也就是先输出结果9,输出结果后然后自加1变成了10,然后执行第二句输出语句输出++i,根据刚才说的++i是先自加,这个时候i的值为10,自加后就变成了11,输出结果就是11,所以上面的代码的执行结果为9和11。

总结:关于两者的区别大家记住一句话i++是先参与运算然后自加1,++i是先自加1然后参与运算

下面大家再看一道面试中的基础小题目,设x=1,y=2,z=3,则表达式y+=z–/++x的值是( )。
A. 3 B. 5 C. 4 D. 5
这个题目的答案是A
首先由于Java中运算符的优先级关系,z–是先参与运算,++x先自加1变成了2,z/x=3/2=1,y=y+1=2+1=3;所>以最后的结果为3,这个表达式执行完后各变量的值分别为y=3,x=2,z=2。

a++

class demo1 
{
    public static void main(String[] args) 
    {
               int a=20;
        int b=19;
        /*
        先运算在赋值;
        1. b先和a作比较,b比a小为假,所以a还是20;
        2. b在自增加1,所以b为20;
        3. 因为三元判断为假,所以c等于自增后的b加a为40;

        */
        int c= b++>=a ? a++:a+b;
        System.out.println(a);//结果是:20
        System.out.println(b);//结果是:20
        System.out.println(c);//结果是:40
    }
}

++a

class demo1 
{
    public static void main(String[] args) 
    {     
                int A=20;
        int B=19;
        /*
        先赋值在运算;
        1.B先自增为20;
        2.三元运算自增后的B等于A,所以c等于20;
        3.因为三元运算为真,所以A自增1为21;
        */
        int C= ++B>=A ? A++:A+B;
        System.out.println(A);//结果是:21
        System.out.println(B);//结果是:20
        System.out.println(C);//结果是:20

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值