如何在Java类中实现运算符

如何在Java类中实现运算符,java,operators,Java,Operators,我正在尝试创建一个无符号整数类 public class UnsignedInteger extends Number implements Comparable<UnsignedInteger> { ... } 公共类UnsignedInteger扩展数字 { ... } 是否有方法实现诸如;+,-,*,/,|,^,>>>, 不,您不能在Java中重写运算符。不。Java不支持运算符重载。。您唯一的选择是定义方法,如add(),subtract

我正在尝试创建一个无符号整数类

public class UnsignedInteger extends Number implements Comparable<UnsignedInteger> 
    { 
    ... 
    }
公共类UnsignedInteger扩展数字
{ 
... 
}

是否有方法实现诸如;+,-,*,/,|,^,>>>, 不,您不能在Java中重写运算符。

不。Java不支持运算符重载。

。您唯一的选择是定义方法,如
add()
subtract()
multiply()
,等等,并在其中写入逻辑,并为特定操作调用它们


您可以查看类,了解如何定义支持各种操作的方法。如果感兴趣,您甚至可以浏览源代码,可以在jdk主目录的src文件夹中找到。

在Java中不可能重写运算符。你可以做的是定义方法来表示操作,比如在标准库DO中。

< P> java不支持操作符重载,他们认为这是一个坏的做法,知道它们重载了
+
+=
字符串类的
+
运算符,已经有5个答案表明不能重载运算符,但我想指出,在对象上根本不能使用算术运算符。它们只适用于基本类型(
int
double
,等等)

以下代码编译的唯一原因

Integer a = 1, b = 2;
Integer c = a + b;
是因为Java编译器将其编译为

Integer a = Integer.valueOf(1), b = Integer.valueOf(2);
Integer c = Integer.valueOf(a.intValue() + b.intValue());
如果您想让它适用于您的
UnsignedInteger
,您必须扩展javac(尽管这是可能的)。

有一个名为“”的javac插件(类似Lombok的注释处理器),它为Java添加了操作符重载

它允许您非常轻松地将运算符重载添加到自己的类中。除此之外,JavaAPI的许多内置类在使用该插件时还支持运算符重载。 (例如:代替list.get(6)或map.get(“hello”),您可以执行list[6]和map[“hello”])

使用javac编译时,只需在类路径中包含.jar


所有主要IDE都有插件:Eclipse、Netbeans和IntelliJ IDEA。

Java不支持重载运算符<代码>C#does~;)我想我在看树的时候错过了森林。这只是事实的一半。它是字符串的语法糖,并由javac转换为
StringBuilder#append()
调用。这是一个很好的答案,我认为关于为什么从语言中排除运算符重载的一些解释会增加很多:)@BenjaminGruenbaum。我在SO上添加了另一篇文章的链接,这篇文章描述了这一点。我对有趣的结局给出了一个赞。这是一个很好的程序员的笑话。噢,java确实有字符串操作