1

我有以下代码:

public class Operators {
    public static void main(String[] args) {
        int i =+ 2;
        System.out.println(i);
    }
}

执行后,我得到以下输出:2

那么=+操作员在这里实际上做了什么?

编辑:

正如一些人回答的那样,它分配+2i,请考虑以下代码:

public class Operators {
    public static void main(String[] args) {
        int i =- -2;
        System.out.println(i);
    }
}

所以在上述情况下,输出应该是-2. 但我越来越2

所以我想,它是-(-2),它给出了2对吗

4

6 回答 6

11
int i =+ 2;

它是对变量 i 的正 2(+2) 赋值。如果你写的像——int i = +2;

再举一个例子——

int i = 2;
i=+3;
System.out.println(i);

它打印 3。

+ 一元加运算符;表示正值(但是,没有这个数字是正的)

更多示例 - http://docs.oracle.com/javase/tutorial/displayCode.html?code=http://docs.oracle.com/javase/tutorial/java/nutsandbolts/examples/UnaryDemo.java

于 2013-10-03T05:27:44.697 回答
5

话虽如此:

int i =+ 2;

+充当一元运算符

详细地说,它设置i为正值2

编辑:您的更新说:

int i =- -2;

产生 2. 为什么?

在这种情况下,它意味着i=-(-(2))。请注意,当值为. 时,使用一元减号运算符可能会产生意外Integer.MIN_VALUE结果。

于 2013-10-03T05:26:17.067 回答
3

我相信你所说的 =+ 真的是 +=。

您的代码将 +2(正 2)的值分配给整数。

例如:

int x =+ 4;
x =+ 8;
Console.WriteLine(x.ToString());
Console.ReadLine();

将打印“8”,而不是 12。这是因为您将 x 分配给 +4,然后再分配 +8。

如果您询问 += 的作用,它是获取初始变量并添加到它的简写。

x += 8

是相同的

x = x + 8

通过将前面的示例形式 =+ 更改为 += 给我们:

int x = 4;
x += 8;
Console.WriteLine(x.ToString());
Console.ReadLine();

将打印“12”。

于 2013-10-03T05:36:05.110 回答
3

您将 i 设置为 +2,这就是您得到的。你期待什么样的输出?

于 2013-10-03T05:26:04.333 回答
1

正如所有其他人都回答了,我想给 JLS 参考。
回答您的编辑

int i =- -2;

jls中指定

  • 一元数字提升(§5.6.1)在操作数上执行。
  • 一元减号表达式的类型是操作数的提升类型。
  • 在运行时,一元减号表达式的值是操作数提升值的算术否定。

所以,

System.out.println(i); //prints 2  

对于整数值,求反与从零减法相同。


笔记

对于浮点值,取反与从零减法不同,因为如果 x 为 +0.0,则 0.0-x 为 +0.0,但 -x 为 -0.0。

一元减号只是反转浮点数的符号。感兴趣的特殊情况:

  • 如果操作数为 NaN,则结果为 NaN。(回想一下,NaN 没有符号(§4.2.3)。)

  • 如果操作数是无穷大,则结果是相反符号的无穷大。

  • 如果操作数为零,则结果是相反符号的零。

有用的链接

  1. 一元运算符
  2. 一元数字提升
于 2013-10-03T05:54:55.050 回答
1

有关一元运算符,请参阅下图。

在此处输入图像描述

这是一个理解它的例子。

public class UnaryDemo {
    public static void main(String[] args) {
        int x = 10;
        int y = 20;

        int result = +x;

        System.out.println("+x = " + result);

        result = -y;

        System.out.println("-y = " + result);
        }
    }

输出是

+x = 10
-y = -20

所以认为运营商为variable = +value而不是variable =+ values。是的那个空间使它更具可读性。

于 2013-10-03T05:39:55.093 回答