Java中的操作符重载

请您能告诉我是否有可能在Java中重载操作符?如果它在Java中被使用,你能告诉我它是什么吗?

237514 次浏览

不,Java不支持用户定义的操作符重载。Java中唯一接近于“自定义”操作符重载的方面是对字符串的+处理,它要么导致常量的编译时连接,要么导致使用StringBuilder/StringBuffer的执行时连接。你不能定义你自己的操作符,它们以同样的方式工作。

对于支持操作符重载的类java(和基于jvm)语言,您可以查看芬兰湾的科特林Groovy。或者,你可能会幸运地找到Java编译插件解决方案

您自己不能这样做,因为Java不允许操作符重载。

然而,一个异常。++ =对于String对象是重载的。

操作符重载在Java中用于String类型的连接:

String concat = "one" + "two";

然而,你不能定义了你自己的操作符重载。

Java不允许操作符重载。首选的方法是在类上定义一个方法来执行操作:a.add(b)而不是a + b。你可以在这里看到Java从C类语言中遗漏的其他位的摘要:从C和c++中移除的特性

除了所有人都指出+对于字符串是重载的,-对于浮点运算和整数运算也是重载的,*/也是如此。

< p >[编辑] %也为浮点重载,这对于具有C或c++背景的人来说可能有点惊讶

可以尝试Java操作符重载。它有自己的局限性,但如果您真的想使用操作符重载,那么值得一试。

只需在Java代码中使用Xtend即可。它支持操作符重载:

    package com.example;


@SuppressWarnings("all")
public class Test {
protected int wrapped;


public Test(final int value) {
this.wrapped = value;
}


public int operator_plus(final Test e2) {
return (this.wrapped + e2.wrapped);
}
}


package com.example


class Test2 {


new() {
val t1 = new Test(3)
val t2 = new Test(5)
val t3 = t1 + t2
}


}

在官方网站上,有一个针对每个操作符实现的方法列表!

或者,你可以让Java Groovy,只是重载这些函数来实现你想要的

//plus() => for the + operator
//multiply() => for the * operator
//leftShift() = for the << operator
// ... and so on ...


class Fish {
def leftShift(Fish fish) {
print "You just << (left shifted) some fish "
}
}




def fish = new Fish()
def fish2 = new Fish()


fish << fish2

谁不想成为/使用groovy呢?: D

不,你不能以同样的方式在Java中使用编译好的groovy jar。对于Java来说,这仍然是一个编译错误。

正如许多人回答的那样:Java不支持用户定义的操作符重载。

也许这是跑题了,但我想评论一下我在一些回答中读到的一些东西。

< p > 可读性。
比较:< / p >
  1. C = a + b
  2. C = a.add(b)
< p >看一遍!
哪个更有可读性?< / >强

允许创建用户定义类型的编程语言应该允许它们以与内置类型(或基本类型)相同的方式工作。

所以Java打破了泛型编程的基本原则:
我们应该能够将内置类型的对象与用户定义类型的对象交换
(你可能会想:“他说的是‘内建物’吗?”是的,在这里看到的。)< / p >

关于字符串连接:

数学家用符号+来表示集合上的交换运算。
所以我们可以确定a + b = b + a
字符串连接(在大多数编程语言中)不尊重这种常见的数学符号
a := "hello";
b := "world";
c := (a + b = b + a);

或在爪哇:

String a = "hello";
String b = "world";
boolean c = (a + b).equals(b + a);
额外< p >:
注意在Java中相等和标识是如何混淆的。 等号的意思是:
a.基本类型的相等性。
b.用户定义类型的标识符检查,因此,我们被迫使用函数 equals()来表示相等。
但是…这与操作符重载有什么关系?
如果语言允许操作符重载,用户可以赋予相等操作符正确的含义

与c++不同,Java不支持用户定义的操作符重载。重载是在java内部完成的。

我们可以以+(plus)为例:

int a = 2 + 4;
string = "hello" + "world";

这里,plus将两个整数相加并连接两个字符串。因此,我们可以说Java支持内部操作符重载,但不支持用户定义的操作符重载。