java比较对象
‘壹’ 如何比较java对象是同一个对象
1.判断两个对象是否是同一个引用对象则用==,"=="比的是地址.因为如果地址相同,则就是同一个对象
2.obj1.equals(Object obj2),用来判断两个对象是否相等(前面给出的是相等的情况。如果你要不相等的话:!obj1.equals(Object obj2)就可以了
‘贰’ java怎么比较2个对象
//抽象父类
abstract class CompareObject {abstract double compareTo();}
//派生子类
class Position extends CompareObject {
double x,y;
public Position(double g,double h) {this.x=g;this.y=h;}
public double getx(){return x;}
public double gety(){return y;}
public static double compareTo(Position a,Position b) { //自己派生的方法
return Math.sqrt(a.x*a.x+a.y*a.y)-Math.sqrt(b.getx()*b.getx()+b.gety()*b.gety());
}
/*继承父类的比较方法作用到子类对象中,必须在父类里面定义比较的方法体,而你这里没有。所以你可以选择自己重新定义一个方法体。
* 也可以在父类里面写好比较的方法体。
*/
double compareTo(CompareObject ca, CompareObject cb) { //实现父类中的方法
// TODO Auto-generated method stub
return 0;
}
public static void main(String[] args){
//比较2点与原点距离之差
Position a=new Position (5,4);
Position b=new Position (7,3);
System.out.println("两点到原点的距离之差为"+compareTo(a,b));
}
@Override
double compareTo() {
// TODO Auto-generated method stub
return 0;
}
}
‘叁’ java怎么比较2个对象
你这个compareTo方法是干啥的?思路不清啊....
你应该写的是一个点的对象(Position)..他要和别一个点(Position )去比较.所以至少你的Position 类中的compareTo这个方法里要获得别一个点的对象.
也就是说应该在实现类中有这样的形式
点1对象.compareTo(点2对象);//说白了就是你的实现类里这行
System.out.println("两点到原点的距离之差为"+compareTo());
应该改成
System.out.println("两点到原点的距离之差为"+a.mpareTo(b);
在计较的时候.也就是你的compareTo()这个方法里..就应该是对象1的距离-对象2的举例
也就是类似这样的.
Math.sqrt(a.getx()*a.getx()*+a.gety()*a.gety())-Math.sqrt(b.getx()*b.getx()+b.gety()*b.gety();//
‘肆’ java怎么只比较两个对象的内容
使用 == 进行比较, 该方式比较的是变量是否同时指向一块内存地址,如果是就返回true,否则返回false
使用对象本身的equals进行比较,equals首先会进行 == 比较,然后会进行逻辑比较,当然你可以自己定义自己的比较逻辑,比如JDK内置的String,Integer,Long等都是重写了这个equals方法的。
总的来说就是 == 表示完全相等,而equals表示逻辑相等
‘伍’ jAVA对象的比较
比较对象的时候有两种相等的情况(看你需要哪一种)
第一种:地址相等,通过==号来比较他们是否是指向同一个地址
第二种:他们的属性相等,有时候两个对象只要他们的属性相等我们就认为他们两个是相等的,那么这种比较就需要你自己重载equals方法,然后在里面判断他们的属性,如果他们的属性全班相等或根据你的需要哪些相等那么他们就相等
比如有一个正方行类
Square s1 = new Square(5);
Square s2 = new Square(5);
这时候你只需他们的边长相等,就认为他们是相等的,那么equals方法就可以这样写
@Override
public boolean equals(Square s) {
return this.side = s.getSide();//side是边长
}
‘陆’ 深入java的equals方法,怎么比较两个对象的
当定义一个类时,首先这个类会继承Object类(所有类的父类)的equals方法,然后开发者可以根据具体业务场景去考虑要不要重写equals方法。
publicbooleanequals(Objectobj){
return(this==obj);
}
上面代码即是Object的equals方法的实现, == 判断,即两个对象的地址完全一样的时候才相等。
当开发者定义类时不重写equals方法,则实际调用中使用Object这个父类的equals方法实现。
下面看看String的equals方法:
publicbooleanequals(ObjectanObject){
if(this==anObject){
returntrue;
}
if(anObjectinstanceofString){
StringanotherString=(String)anObject;
intn=value.length;
if(n==anotherString.value.length){
charv1[]=value;
charv2[]=anotherString.value;
inti=0;
while(n--!=0){
if(v1[i]!=v2[i])
returnfalse;
i++;
}
returntrue;
}
}
returnfalse;
}
这就是String重写的equals方法,可以仔细看看,很有参考价值。
接下来写段类定义的代码:
publicclassPerson{
privateStringname;//姓名
privateintage;//年龄
privateStringspeciality;//特长
@Override
publicbooleanequals(Objectobj){
//两个对象是同一个时,直接returntrue
if(this==obj){
returntrue;
}
if(objinstanceofPerson){
//比较对象也是Person对象时,判断name和age是否都相同
Personp=(Person)obj;
returnname.equals(p.name)&&age==p.age;
}
returnfalse;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicintgetAge(){
returnage;
}
publicvoidsetAge(intage){
this.age=age;
}
publicStringgetSpeciality(){
returnspeciality;
}
publicvoidsetSpeciality(Stringspeciality){
this.speciality=speciality;
}
}
测试代码:
publicclassTest{
publicstaticvoidmain(String[]args)throwsIOException{
Personp1=newPerson("张三",20,"java");
Personp2=newPerson("张三",20,"python");
System.out.println(p1.equals(p2));
}
}
根据Person重写的equals方法可以知道,运行结果为 true
如果Person没有重写equals方法,那么会调用Object的equals方法,运行结果为 false
所以实际怎么比较两个对象这完全是看开发者也就是你自己的意思
‘柒’ 有关于Java中对象比较“==”和“equals()”,下面有一个程序为例
this.title的数据类型是String,属于引用数据类型,引用类型的比较一般使用equals方法来判断两个对象的内容是否相等。因为this.title是一个String对象,因而可通过点运算符来调用equals方法来比较两个String对象的内容是否相等。
this.price的数据类型是double,属于基本数据类型,基本数据类型的比较直接使用==来判断其值是否相等。因为this.price是一个基本类型的变量不是一个对象,因而不能通过点运算符来调用equals方法。
‘捌’ java怎么比较2个对象
你这个compareTo方法是干啥的?思路不清啊....
你应该写的是一个点的对象(Position)..他要和别一个点(Position
)去比较.所以至少你的Position
类中的compareTo这个方法里要获得别一个点的对象.
也就是说应该在实现类中有这样的形式
点1对象.compareTo(点2对象);//说白了就是你的实现类里这行
System.out.println("两点到原点的距离之差为"+compareTo());
应该改成
System.out.println("两点到原点的距离之差为"+a.mpareTo(b);
在计较的时候.也就是你的compareTo()这个方法里..就应该是对象1的距离-对象2的举例
也就是类似这样的.
Math.sqrt(a.getx()*a.getx()*+a.gety()*a.gety())-Math.sqrt(b.getx()*b.getx()+b.gety()*b.gety();//