【问题标题】:what is the difference between i+=i*i and i=+i*i in java? [duplicate]java中的i+=i*i和i=+i*i有什么区别? [复制]
【发布时间】:2017-10-23 11:11:45
【问题描述】:

有什么区别

i+=i*i

i=+i*i 

在java中?

谁能告诉我它背后的概念是什么。它在内部如何运作? 我得到任何值的不同输出。

【问题讨论】:

  • += 将右侧的值添加到左侧的变量中。 = +... 分配右侧的值。 + 是表达式的一部分。
  • += 是加号运算符。右侧操作数的值与左侧操作数的值相加。 =+ 是两个独立的运算符:=+
  • i += x 表示“将i 增加x”。 i = +x 表示“将 i 设置为 x”
  • 所以你认为+==+ 应该是同一个东西?为什么?
  • 没有=+ 运算符。

标签: java


【解决方案1】:

i+=i*i 等价于:

i = i + (i*i);

i=+i*i 等价于:

i = i * i;

【讨论】:

  • 特别是 i = +(i * i) 以防 i 是一个复数(不是真的,它不会使数字为正数)
  • @StephenC 很清楚,当我添加 (not really... 部分时,我不小心删除了我评论中关于它是复数的 (unlikely) 部分
  • 实际上,如果i 很复杂,那也没什么区别。一元加号运算符不会改变操作数的符号。
【解决方案2】:

让我为你解析一下:

i += i * i     // uses the "plus and becomes" operator

i = +i * i     // uses the assignment operator and the unary plus operator

第一个等价于

i = i + ( i * i )

第二个等价于

i = i * i

(实际上,一元 + 运算符会导致发生“一元提升”。这可能会导致拆箱和/或提升到 int,具体取决于 i 的类型。但是,在此示例中,等效提升对于* 的操作符,无论如何都会发生,所以+ 没有净效应。)

【讨论】:

    猜你喜欢
    • 2010-10-11
    • 2013-05-22
    • 1970-01-01
    • 2011-03-21
    • 2021-08-25
    相关资源
    最近更新 更多