it-swarm.cn

“+ =”运算符在Java中做什么?

你能帮我理解下面代码的含义:

x += 0.1;
25
Kotaro Ezawa

编程的“常识”是x += yx = x + y的等效简写符号。只要xy属于同一类型(例如,两者都是ints),您可以认为这两个语句是等价的。

但是,在Java中,x += y 通常不是 x = x + y相同。

如果xy属于不同类型,则由于语言规则,这两个语句的行为会有所不同。例如,让我们有x == 0(int)和y == 1.1(double):

    int x = 0;
    x += 1.1;    // just fine; hidden cast, x == 1 after assignment
    x = x + 1.1; // won't compile! 'cannot convert from double to int'

+=执行隐式转换,而对于+,您需要显式转换第二个操作数,否则会出现编译器错误。

引自Joshua Bloch的 Java Puzzlers

(...)复合赋值表达式自动将它们执行的计算结果转换为左侧变量的类型。如果结果的类型与变量的类型相同,则强制转换无效。但是,如果结果的类型比变量的类型宽,则复合赋值运算符执行静默缩小基元转换[ JLS 5.1.3 ]。

88
jakub.g
  • x += yx = x + y
  • x -= yx = x - y
  • x *= yx = x * y
  • x /= yx = x / y
  • x %= yx = x % y
  • x ^= yx = x ^ y
  • x &= yx = x & y
  • x |= yx = x | y

等等 ...

15
Eng.Fouad

它是 赋值运算符之一 。它取x的值,加0.1,然后将(x + 0.1)的结果存储回x

所以:

double x = 1.3;
x += 0.1;    // sets 'x' to 1.4

它功能相同,但短于:

double x = 1.3;
x = x + 0.1;

注意:在进行浮点数学运算时,事情 并不总是按照你认为的方式工作

13
jefflunt

devtop += Math.pow(x[i] - mean, 2);会将Math.pow(x[i] - mean, 2)操作的结果添加到devtop变量中。

一个更简单的例子:

int devtop = 2;
devtop += 3; // devtop now equals 5
2
James Skidmore

devtop += Math.pow(x[i] - mean, 2);Math.pow(x[i] - mean, 2)添加到devtop

1
adatapost

在Java中,默认类型的数字,如2或-2(没有小数组件)是int,不像c#,它不是一个对象,我们不能像c#中那样2.tostring和2.5之类的默认数字类型(含有分数成分)是双倍的;所以,如果你写:

short s = 2;
s = s + 4;

你会得到一个编译错误,如果你像下面这样做,int也不能简而言之:

float f = 4.6;
f = f + 4.3;

你会得到两个编译错误,用于在两行中将double“4.6”设置为浮点变量,并且第一行的错误是合乎逻辑的,因为float和double使用不同的存储数字系统而使用一个而不是另一个会导致数据丢失;提到的两个例子可以这样改变:

s += 4
f += 4.3

它们都隐藏在代码后面并且没有编译错误;值得考虑的另一点是“字节”数据类型范围内的数字在Java中缓存,因此数字-128到127在Java中是字节类型,因此此代码没有任何编译错误:

byte b = 127

但这个确实有一个错误:

byte b = 128

因为128是Java中的int;关于长数字,我们建议在整数溢出的数字之后使用L,如下所示:

long l = 2134324235234235L

在Java中,我们没有像c ++这样的运算符重载,但+ =仅为String重载而不是让我们说StringBuilder或StringBuffer,我们可以使用它而不是String'concat'方法但是我们知道String是不可变的,并且创建另一个对象,不会像以前那样更改同一个对象:

String str = "Hello";
str += "World";

没关系;

1
alirezafnatica