帮忙么网 > JAVA > 当前页面

java中a=a+b和a+=b真的一样吗?

2025-01-13 NEW个对象

这是一道笔试题,说实话我就是再复习两年,也不会复习到这个题。

既然遇到了,就了解清楚吧:

a = a+b

如果 a 和 b 是不同类型的,比如 a 是 int 类型而 b 是 byte 类型,b 会被提升为 int 类型,然后进行加法运算。如果你试图将结果赋值回一个较小的数据类型,比如 byte,将会出现编译错误,除非你使用显式类型转换。

b+=a

1、如果 a 和 b 类型不同,Java 会自动将 a + b 的结果类型转换为 a 的类型,然后赋值给 a。这意味着即使 a 和 b 的类型不同,你也不会得到编译错误。

例如,如果 a 是 byte 类型而 b 是 int 类型,a += b 会自动将 a + b 的结果从 int 转换为 byte 类型,然后赋值给 a,这个过程不需要显式类型转换。

实战例子:

byte b=233,byte a=233,b= a+b,与b+=a的区别。


因为 a 和 b 是 byte 类型,而在 Java 中,所有小于 int 的整数类型(byte、short 和 char)在参与算术运算时会被自动提升为 int 类型。

所以a+b的类型是int,b是char,所以为报编译错误。


b += a 是复合赋值运算符的写法,等价于 b = (byte)(b + a),因为b=233,a=233,所以存在溢出风险。

相关文章

  • 面向对象三大特性 :封装、继承、多态

    面向对象三大特性 :

    NEW个对象 2025-01-10

  • 什么是反射机制?为什么慢?

    反射机制是指在运行时能获取到自身信息,只要给出类名,就可以访问类的属性和方法。

    NEW个对象 2025-01-09

  • cglib与jdk代理的区别

    JDK 动态代理: 只支持接口代理。它通过反射机制生成一个实现了指定接口的代理类。 代理对象只能调用接口中定义的方法。 CGLib 动态代理: 通过继承方式生成代理类。它可以代理没有实现接口的类。 代理对象可以调用类中的所有方法(除了final方法)。

    NEW个对象 2025-01-18

推荐文章