我正在尝试创建一个无符号整数类。
public class UnsignedInteger extends Number implements Comparable<UnsignedInteger>
{
...
}
有没有办法实现运算符,例如;+、-、*、/、<<、>>、|、^、>>>、<<
Java 不支持运算符重载。您唯一的选择是定义方法,如add()
, subtract()
,multiply()
等,并在那里编写逻辑,并为特定操作调用它们。
您可以查看BigInteger类,了解如何定义方法来支持各种操作。如果有兴趣,您甚至可以浏览源代码,您可以在jdk主目录的src文件夹中找到该源代码。
已经有 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
的.
不,您不能覆盖 Java 中的运算符。
在 Java 中无法覆盖运算符。您可以做的是定义表示操作的方法,例如标准库中的BigDecimal或BigInteger。
有一个名为“ Java-OO ”的 javac-plugin(像 Lombok 这样的注释处理器),它为 Java 添加了运算符重载。
它允许您非常轻松地将运算符重载添加到您自己的类中。除此之外,Java API 的许多内置类在使用此插件时也支持运算符重载。 (例如:你可以用 list[6] 和 map["hello"] 代替 list.get(6) 或 map.get("hello"))
您需要做的就是在使用 javac 编译时将 .jar 包含在类路径中。
所有主要 IDE 都有插件:Eclipse、Netbeans 和 IntelliJ IDEA。
不,Java 不支持运算符重载。
Java 不支持运算符重载,他们认为这是一种不好的做法,因为他们知道它们为类重载+
和+=
运算符String