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

时间:2013-03-18 21:15:46

标签: java object return

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

我有:

public class element实现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()等

来完成这个

4 个答案:

答案 0 :(得分:6)

根据JLS 15.20.1,您无法对>运算符使用对象引用; Java不支持运算符重载。但是,使用Comparator

,您走在正确的轨道上
if (comparator.compare(element1, element2) > 0)  // if (element1 > element2)

如果您的班级为Comparable<Element>,也可以与其他元素相比。

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

答案 1 :(得分:2)

不,这在Java中是不可能的。来自JLS §15.20.1

  

数值比较运算符的每个操作数的类型   必须是可转换(§5.1.8)到原始数字的类型   类型,或发生编译时错误。

这在Python这样的语言中是可能的,其中几乎所有运算符都可以重载以使用非标准类。

答案 2 :(得分:1)

Java并不支持这一点。你可以改用以下内容:

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

}

并在您的compareTo方法中,执行以下操作:

public int compareTo(YourClassObject o) {
    return (this.value - YourClassObject.value);
}

答案 3 :(得分: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"