关于java bean实体类的2个对象比较
比较两个对象的话,
如果直接父类是Object的话,equals()和==并无区别。
如果自己需要定义比较规则的话,那就重写equals方法和hashCode方法。
java 实体bean 的比较,并获取2个实体中不同的属性
重写student 的toString 方法 直接比较对象就行了
如果在精确些的重写hashcode方法
public class Student {
private String id;
private String name;
private String add;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAdd() {
return add;
}
public void setAdd(String add) {
this.add = add;
}
@Override
public String toString() {
return “Student [id=” + id + “, name=” + name + “, add=” + add + “]”;
}
}
自己封装这个对象 打印下试试
也可以采用 这个是第三方实现的
zhongtyler|五级
使用apache的beanutil 可以遍历属性名称,和属性内容
java比较实体类
这种情况你可以使用反射去写一个通用的方法,不过前提是你的那些实体类都是简单的包装类,稍后奉上代码。代码如下:
package pojo;
/**
* Created by liaokai on 2017/11/17 0017.
*/
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
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;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
if (age != person.age) return false;
return name != null ? name.equals(person.name) : person.name == null;
}
@Override
public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + age;
return result;
}
@Override
public String toString() {
return “Person{” +
“name='” + name + ‘\” +
“, age=” + age +
‘}’;
}
}
package util;
import pojo.Person;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Created by liaokai on 2017/11/17 0017.
*/
public class CompareUtilT {
public ListMap compareT(T t1,T t2,String className){
ListMap list = new ArrayListMap();
//内容没改变直接返回
if(t1.equals(t2)){
return list;
}
try {
Class c = Class.forName(className);
//读取t1和t2中的所有属性
Field[] fields = c.getDeclaredFields();
for (int i = 0; i fields.length; i++) {
Field field =fields[i];
field.setAccessible(true);
Object value1=field.get(t1);
Object value2=field.get(t2);
//判断这两个值是否相等
if(!isValueEquals(value1,value2)){
Map map = new HashMap();
map.put(“name”,field.getName());
map.put(“before”,value1);
map.put(“after”,value2);
list.add(map);
}
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return list;
}
private boolean isValueEquals(Object value1, Object value2) {
if(value1==nullvalue2==null){
return true;
}
if(value1==nullvalue2!=null){
return false;
}
if(value1.equals(value2)){
return true;
}
return false;
}
}
package pojo;
import util.CompareUtil;
/**
* Created by liaokai on 2017/11/17 0017.
*/
public class Test {
public static void main(String[] args) {
Person p1 = new Person(“张三”,14);
Person p2 = new Person(“张三”,15);
Person p3 = new Person(“李四”,15);
CompareUtilPerson compareUtil = new CompareUtilPerson();
System.out.println(compareUtil.compareT(p1,p1,Person.class.getName()));
System.out.println(compareUtil.compareT(p1,p2,Person.class.getName()));
System.out.println(compareUtil.compareT(p1,p3,Person.class.getName()));
System.out.println(compareUtil.compareT(p2,p3,Person.class.getName()));
}
}
//运行结果
[]
[{before=14, name=age, after=15}]
[{before=张三, name=name, after=李四}, {before=14, name=age, after=15}]
[{before=张三, name=name, after=李四}]
Java两个子类怎么比较属性
比较两个实体属性值,返回一个boolean,true则表时两个对象中的属性值无差异
* @param oldObject 进行属性比较的对象1
* @param newObject 进行属性比较的对象2 * @return 属性差异比较结果boolean
举例说明JAVA类,对象,实体之间的关系
1.类是面向对象程序设计的核心,其实是一种复杂的数据类型,封装了不同类型的数据和与这些数据相关的方法。
2.类是抽象的(相当于现实生活中的模具,图纸),并不是最终的实体,将抽象化的类具体化后(就是按照模具,图纸生产出实际东西),就成了对象,通常将对象称为类的实体。
所以,类是将现实事物抽象化,而对象是将事物具体化。
举例:张三是一个学生,那么张三其实是比较具体的一个人,而学生则是一个抽象事物。此时可以创建一个学生类,包含学号,年龄,班级等。如果指明张三这些属性,则张三是学生类的一个实体。
创建学生类:Student
public
class
Student{
public
String
studentNo;
public
int
age;
public
String
grade;
}
这就是一个类,一个模具。
通过这个模具,可以生产出来很多产品:
Student
zhang
=
new
Student();
这句代码,即为创建了一个对象:zhang
希望LZ能够通过这个实例,搞懂对象、类和实体之间的关系。
为什么java内要判断两个对象是否相等呢?
一个标准的实体类的4大基本规则:1.封装(属性私有化,分别提供对应的get与set方法等),2、提供无参构造,3、重写:toString,equals,hashCode这3个方法,4、实现java.io.Serializable接口。所以java要判断两个对象是否相等。
先说equals,重写它就是为了以后比较对象是否相等,比如你问题中的假如父类是person,子类是student,那么当我们new了几个student后,在程序中怎么去判断这几个student实例是否是同一个学生呢?这时如果我们的student重写了equals(比如你按照学号来比较),那么你就可以用S1.equals(S2)来比较了。
至于hashCode,那是因为假如我们存取数据时 是存放在键值对中时(比如Map),这时候光靠equals效率不高,这时候用对象的哈希码(即hashCode方法得到的)来查找和比较更快,所以一般重写equals方法必须重写hashCode方法,因为java规定相等的对象必须有相等的哈希码。