Java对象:if语句中用于比较的值,运算符重载

3

是否可能为自定义对象定义用于if语句比较的值?

我有如下代码:

public class element implements Comparable {

public int value;
public int[] sequence;
public int length;

public element(){}   

public element(int val){
    this.value = val;
}

@Override
public int compareTo(Object o) {
    return
}

我想使用以下格式的if语句:

if (element1 > element2) ..

而不是传统的:

if (element1.value > element2.value) ..

我尝试使用比较器、toString()等方法,但都无法实现。


element1element2是什么?如果它们是element类型的对象,那么如果你正确实现了compareTo()方法,就可以使用element1.compareTo(element2) - Code-Apprentice
你应该尽量具体说明。你的需求不够清晰。 - user2030471
1
Java中没有运算符重载。<>只能用于数字(byte、short、char、int、long、float、double)。 - MrSmith42
Java不支持运算符重载。您可以调用element1.compareTo(element2)进行比较,并确保compareTo按所需返回-1、0和1。 - JProgrammer
4个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
6
根据 JLS 15.20.1,在Java中不能使用对象引用和>运算符一起使用,因为Java不支持运算符重载。但是你可以使用Comparator来完成你的需求。
if (comparator.compare(element1, element2) > 0)  // if (element1 > element2)
如果您的类是Comparable<Element>,即可与其他元素进行比较。
if (element1.compareTo(element2) > 0)  // if (element1 > element2)

2
不,这在Java中是不可能的。根据JLS §15.20.1

数值比较运算符的每个操作数的类型必须是可转换(§5.1.8)为原始数值类型的类型,否则会出现编译时错误。

在像Python这样的语言中,几乎所有运算符都可以被重载以处理非标准类。

1

Java不支持这个。您可以使用类似以下的内容:

if (element1.compareTo(element2) > 0) {

}
在你的compareTo方法中,像这样做:
public int compareTo(YourClassObject o) {
    return (this.value - YourClassObject.value);
}

1

由于Java不支持操作符重载,使用执行所需比较的方法来比较两个对象是最佳选择。

WrapperClass.compare(object1, object2) > 0 for object1.value > object2.value
WrapperClass.compare(object1, object2) < 0 for object1.value < object2.value
WrapperClass.compare(object1, object2) = 0 for object1.value == object2.value

String是一个类,它提供了运算符重载,例如连接运算符。

String str1 = "This ";
String str2 = "is a string";
str1 + str2 equals "This is a string"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,