怎么把两个对象不同属性值找出来 先get到然后看看是否equals不就行了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这才4个字段 要是多的话 要写很多equals的 循环遍历 equals比较呗 只要写一次就好了 字段多也就多循环几次 利用反射可以自己写个equals方法//返回一个map以不同的属性名为key,value为一个list分别存obj1,obj2此属性名的值public static Map<String,List<Object>> equals(Object obj1,Object obj2){ Map<String,List<Object>> map=new HashMap<String,List<Object>>(); if(obj1.getClass()==obj2.getClass()){//只有两个对象都是同一类型的才有可比性 Class clazz=obj1.getClass(); PropertyDescriptor[] pds=Introspector.getBeanInfo(clazz,Object.class).getPropertyDescriptors(); } return map;} 还没写完.....不注意点了ctrl+enter提交了.....补充//返回一个map以不同的属性名为key,value为一个list分别存obj1,obj2此属性名的值public static Map<String,List<Object>> equals(Object obj1,Object obj2){ Map<String,List<Object>> map=new HashMap<String,List<Object>>(); if(obj1.getClass()==obj2.getClass()){//只有两个对象都是同一类型的才有可比性 Class clazz=obj1.getClass();//获取object的属性描述 PropertyDescriptor[] pds=Introspector.getBeanInfo(clazz,Object.class).getPropertyDescriptors(); for(PropertyDescriptor pd:pds){//这里就是所有的属性了 String name=pd.getName();//属性名 Method readMethod=pd.getReadMethod();//get方法//在obj1上调用get方法等同于获得obj1的属性值 Object o1=readMethod.invoke(obj1);//在obj2上调用get方法等同于获得obj2的属性值 Object o2=readMethod.invoke(obj2); if(!o1.equals(o2)){//比较这两个值是否相等,不等就可以放入map了 List<Object> list=new ArrayList<Object>(); list.add(o1); list.add(02); map.put(name,list); } } } return map;} 实际开发中好像不推荐使用反射,影响效率,只有字段非常多的时候才用反射吧,直接get出来判断就行了 这类问题还是直接用get就好了。顶楼上 这才4个字段 要是多的话 要写很多equals的其实怎么实现比较是不可难免的,要不你可以把每上对象的属性值放到一个数组中,这样一次for循环比较对应的下标所对应的值是不是相等就可以了 在Student类中添加个属性 加上setter getterprivate ArrayList<String> arr;写个方法用来将student类的所有成员变量存入上面的ArrayList成员变量变多时 在这里add就好了private static ArrayList<String> toArr(Student s) { ArrayList<String> a = new ArrayList<String>(); a.add(s.getName()); a.add(s.getAge()+""); a.add(s.getSex()); a.add(s.getAddress()); return a; }再写个遍历比较的方法public static void diff(Student s1, Student s2) { int length = s1.getArr().size(); String str1 = null; String str2 = null; for(int i=0; i<length; i++) { str1 = s1.getArr().get(i); str2 = s2.getArr().get(i); if(!str1.equals(str2)) { System.out.println(str1 + "------" + str2); } } }最后在main里调用public static void main(String[] args) { Student stu1 = new Student("张三", 20, "男", "家"); Student stu2 = new Student("张三三", 20, "男", "家1"); stu1.setArr(toArr(stu1)); stu2.setArr(toArr(stu2)); diff(stu1, stu2); } 输出结果张三------张三三家------家1 贴个完整代码import java.io.Serializable;import java.util.ArrayList;public class Student implements Serializable { private String name; private int age; private String sex; private String address; private ArrayList<String> arr; public ArrayList<String> getArr() { return arr; } public void setArr(ArrayList<String> arr) { this.arr = arr; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public Student(String name, int age, String sex, String address) { this.name = name; this.age = age; this.sex = sex; this.address = address; } private static ArrayList<String> toArr(Student s) { ArrayList<String> a = new ArrayList<String>(); a.add(s.getName()); a.add(s.getAge()+""); a.add(s.getSex()); a.add(s.getAddress()); return a; } public static void main(String[] args) { Student stu1 = new Student("张三", 20, "男", "家"); Student stu2 = new Student("张三三", 20, "男", "家1"); stu1.setArr(toArr(stu1)); stu2.setArr(toArr(stu2)); diff(stu1, stu2); } public static void diff(Student s1, Student s2) { int length = s1.getArr().size(); String str1 = null; String str2 = null; for(int i=0; i<length; i++) { str1 = s1.getArr().get(i); str2 = s2.getArr().get(i); if(!str1.equals(str2)) { System.out.println(str1 + "------" + str2); } } }} 重写equals方法不就行了?定义对象以后调用equals比较 JAVA中线程同步方法有哪些? eclipse 中的中文注释全乱码了,求救,紧急。。。。 自定义的class,在import的时候为什么会出现软件包不存在? 在线等知道的大哥们回答!为什么这句话没有执行啊!!!! 用fetion.jar来发短信 java虚拟机是用java自已开发的呀,还是用c或c++开发的呀?一直不明白.想得到确切答案,谢谢. 关于接口是如何实现的? 编程基础问题 用JAVA 读BMP文件 super调用父类构造器放在什么位置? 如何理解对象的定义? socket里面的问题
public static Map<String,List<Object>> equals(Object obj1,Object obj2){
Map<String,List<Object>> map=new HashMap<String,List<Object>>();
if(obj1.getClass()==obj2.getClass()){//只有两个对象都是同一类型的才有可比性
Class clazz=obj1.getClass();
PropertyDescriptor[] pds=Introspector.getBeanInfo(clazz,Object.class).getPropertyDescriptors();
}
return map;
}
public static Map<String,List<Object>> equals(Object obj1,Object obj2){
Map<String,List<Object>> map=new HashMap<String,List<Object>>();
if(obj1.getClass()==obj2.getClass()){//只有两个对象都是同一类型的才有可比性
Class clazz=obj1.getClass();
//获取object的属性描述
PropertyDescriptor[] pds=Introspector.getBeanInfo(clazz,Object.class).getPropertyDescriptors();
for(PropertyDescriptor pd:pds){//这里就是所有的属性了
String name=pd.getName();//属性名
Method readMethod=pd.getReadMethod();//get方法
//在obj1上调用get方法等同于获得obj1的属性值
Object o1=readMethod.invoke(obj1);
//在obj2上调用get方法等同于获得obj2的属性值
Object o2=readMethod.invoke(obj2);
if(!o1.equals(o2)){//比较这两个值是否相等,不等就可以放入map了
List<Object> list=new ArrayList<Object>();
list.add(o1);
list.add(02);
map.put(name,list);
}
}
}
return map;
}
其实怎么实现比较是不可难免的,要不你可以把每上对象的属性值放到一个数组中,这样一次for循环比较对应的下标所对应的值是不是相等就可以了
在Student类中添加个属性 加上setter getter
private ArrayList<String> arr;写个方法用来将student类的所有成员变量存入上面的ArrayList
成员变量变多时 在这里add就好了private static ArrayList<String> toArr(Student s) {
ArrayList<String> a = new ArrayList<String>();
a.add(s.getName());
a.add(s.getAge()+"");
a.add(s.getSex());
a.add(s.getAddress());
return a;
}
再写个遍历比较的方法public static void diff(Student s1, Student s2) {
int length = s1.getArr().size();
String str1 = null;
String str2 = null;
for(int i=0; i<length; i++) {
str1 = s1.getArr().get(i);
str2 = s2.getArr().get(i);
if(!str1.equals(str2)) {
System.out.println(str1 + "------" + str2);
}
}
}
最后在main里调用public static void main(String[] args) {
Student stu1 = new Student("张三", 20, "男", "家");
Student stu2 = new Student("张三三", 20, "男", "家1");
stu1.setArr(toArr(stu1));
stu2.setArr(toArr(stu2));
diff(stu1, stu2);
}
输出结果张三------张三三
家------家1
import java.util.ArrayList;public class Student implements Serializable {
private String name;
private int age;
private String sex;
private String address;
private ArrayList<String> arr;
public ArrayList<String> getArr() {
return arr;
}
public void setArr(ArrayList<String> arr) {
this.arr = arr;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Student(String name, int age, String sex, String address) {
this.name = name;
this.age = age;
this.sex = sex;
this.address = address;
}
private static ArrayList<String> toArr(Student s) {
ArrayList<String> a = new ArrayList<String>();
a.add(s.getName());
a.add(s.getAge()+"");
a.add(s.getSex());
a.add(s.getAddress());
return a;
}
public static void main(String[] args) {
Student stu1 = new Student("张三", 20, "男", "家");
Student stu2 = new Student("张三三", 20, "男", "家1");
stu1.setArr(toArr(stu1));
stu2.setArr(toArr(stu2));
diff(stu1, stu2);
}
public static void diff(Student s1, Student s2) {
int length = s1.getArr().size();
String str1 = null;
String str2 = null;
for(int i=0; i<length; i++) {
str1 = s1.getArr().get(i);
str2 = s2.getArr().get(i);
if(!str1.equals(str2)) {
System.out.println(str1 + "------" + str2);
}
}
}
}