Java 是否有一个以上的岗位增量?

Java 是否有一个以上的岗位增量?,java,c#,math,Java,C#,Math,只是有个有趣的想法。在像C#和Java这样的语言中,我知道当涉及到递增和递减时,您可以执行post,或者预递增/递减。像这样: int a = 5; Console.WriteLine(a++); // Would print out 5, // And then increment a to 6 Console.WriteLine(++a); // Would then print out 7 because

只是有个有趣的想法。在像C#和Java这样的语言中,我知道当涉及到递增和递减时,您可以执行post,或者预递增/递减。像这样:

int a = 5;
Console.WriteLine(a++); // Would print out 5,
                        // And then increment a to 6

Console.WriteLine(++a); // Would then print out 7 because 
                        // it increments a before printing it out
但是,我想知道是否有这样的事情,人们可能会这样做:

int a = 5;
Console.WriteLine(a += 5); // Would print out 5,
                           // And then increment a to 10

Console.WriteLine(a =+ 5); // (Or something along those lines)
                           // To print out 15 at this point
我只是感兴趣,不知道在哪里或如何寻找答案,所以想知道是否有人会知道更多关于它的信息。谢谢

编辑:从评论中添加了我的问题


a+=5
a=+
5的具体定义在哪里?我从来没见过第二个在用。它真的存在吗。。。?它们编译成相同的东西吗?

以下打印了所需的结果,但不是非常漂亮的代码:

int a = 5;
System.out.println(a+=5);
System.out.println((a+=5)-5);
System.out.println(a);
印刷品:

10,10,15

a+=5
返回增量后
a
的值
(a+=5)-5
递增
a
,并返回递增前的值

a=+5
只是编译成
a=5
。这将执行赋值和。这类似于执行
a=-5
a
等于负5)

印刷品:

五,

C#
中,等效代码生成相同的输出:

int a = 5;
Console.WriteLine(a+=5);
Console.WriteLine((a+=5)-5);
Console.WriteLine(a);
Console.WriteLine(+5);
印刷品:

10,10,15,5


不。
a+=5
不是岗位增量。这是一个增量


a++
是后期增量。而
++a
是预增量。

在过去,C语言提供这种语法作为从变量中添加或减去值的快捷方式

 a =+ 5;
 b =- 5;
但在C语言的早期(关于美好的记忆),他反对使用这种语法,支持

 a += 5;
 b -= 5;
出于同样的目的,因为编写
b=-5
太容易了,这意味着与
b-=5
完全不同。这位“经验丰富”的程序员记得重写了一堆代码以匹配新的语言规范


因此,在那些结构中从来没有像
a++
--b

中那样的增量前或增量后语义,在我所知的任何语言中都没有这样的运算符,但你可以编写自己的C函数来做同样的事情

static void postAdd<T>(ref T lhs, T rhs) {
    T saved = lhs;
    lhs += rhs;
    return saved;
}
静态无效后添加(参考左、右){
T=lhs;
lhs+=rhs;
保存的返回;
}
这在Java中是不可能的,因为Java不支持使用
ref
控制台.WriteLine(a+=5)传递引用

在兰格是完全合法的。它是一种预递增运算符,在将值返回到
WriteLine
调用之前,它将递增变量
a

=+不是有效的运算符,因为它不是由C#标准定义的。可在此页面上找到所有C#运算符:

不可能创建自己的运算符,因为编译器必须知道如何生成表达式树或解析行以生成IL。除此之外,通过大量的工作,特别是随着Rosyln的发布,理论上你可以制作自己的语言(比如IronPython),其中包含了这些操作符

最接近您自己的运算符的是扩展方法,例如:

public class Extensions
{
    public static int AddMul(this int x, int add, int mull)
    {
        return x * mull + add;
    }
}
其使用方式如下:

int x = 4;
int y = x.AddMul(2, 3);  //y now equals 14

实际上,a+=5返回a,因此第一种情况有效。至少在java中。@Thorbjørnravandersen实际上
Console.WriteLine(a+=5)
是一个完全合法的语句,如果一个起始值=5,它将打印10,试试看。另外,a=+5也是完全合法的。它将a的值设置为+5。不,很遗憾,您不能,运算符是由该语言定义的,不允许扩展。这就像在
或的同时创建新的关键字
,尽管您可以覆盖现有关键字以更改它们对继承类型或新类型的工作方式,但搜索c#运算符重载。=+不是运算符,而是两个运算符。赋值运算符和一元+运算符。看。没错,
ref
关键字将是一个很好的方法。掌声感谢你已经足够大了,可以重写它了。
int x = 4;
int y = x.AddMul(2, 3);  //y now equals 14