class.equals

public boolean equals(Object obj) 
1.自身和自身应该是equals的. X.equals(x) return ture
2.如果A等于B, 那么B也就等于A . X.equals(y) 那么 Y.equals(X)
3.传递性: X.equals(Y) Y.equals(Z) 那么 X.equals(Z).
4.永恒性. 始终是相等的. 今天是相等的那么明天也会是相等的.
5.对于任何的non-null数值和null值进行比较得到的结果永远是false. X.equals(null) 输出false.\


默认实现:当且仅当X.Y都指向同一个对象时.编译器才返回ture.
The equals method for class Object implements the most discriminating possible equivalence relation on objects; that is, for any non-null reference values x and y,
this method returns true if and only if x and y refer to the same object (x == y has the value true).

从上文知: x = y; 和 x.equals(y);是一样的意思

equals的东西需要自己去改写. 通过复制粘贴改写equals.

instanceof:(运算符)二进制操作符 它的作用是判断其左边对象是否为其右边类的实例,返回boolean类型的数据。

Cat C = (cat)obj; 将obj强制转换成cat类型.

J2SDK提供的一些类.如string.Date等重写了equals方法.String本身对equals进行了重写. 只要字符序列一样就会输出true.

转载于:https://www.cnblogs.com/dwj-ngu/p/6143289.html

import java.lang.reflect.Field; import java.util.HashMap; import java.util.Map; public class ReflectionCache { // 双重缓存结构:外层缓存类名,内层缓存字段名->Field对象 private static final Map<Class<?>, Map<String, Field>> CLASS_FIELD_CACHE = new HashMap<>(); // 线程安全的对象复制方法 public static void copyProperties(Object target, Object source) { if (target == null || source == null) return; Class<?> targetClass = target.getClass(); Class<?> sourceClass = source.getClass(); // 获取或创建字段缓存 Map<String, Field> targetFields = getOrCreateFieldCache(targetClass); Map<String, Field> sourceFields = getOrCreateFieldCache(sourceClass); // 遍历源对象字段 for (Map.Entry<String, Field> entry : sourceFields.entrySet()) { String fieldName = entry.getKey(); Field sourceField = entry.getValue(); // 查找目标对象对应字段 Field targetField = targetFields.get(fieldName); if (targetField != null) { // 类型兼容性检查 if (isCompatibleTypes(sourceField.getType(), targetField.getType())) { try { // 复制字段值 Object value = sourceField.get(source); targetField.set(target, value); } catch (IllegalAccessException e) { // 处理异常,记录日志 } } } } } // 获取或创建类的字段缓存 private static Map<String, Field> getOrCreateFieldCache(Class<?> clazz) { // 双重检查锁确保线程安全 if (!CLASS_FIELD_CACHE.containsKey(clazz)) { synchronized (ReflectionCache.class) { if (!CLASS_FIELD_CACHE.containsKey(clazz)) { Map<String, Field> fieldMap = new HashMap<>(); // 递归获取所有字段(包括父类) for (Class<?> current = clazz; current != null; current = current.getSuperclass()) { for (Field field : current.getDeclaredFields()) { field.setAccessible(true); // 突破访问限制 fieldMap.put(field.getName(), field); } } CLASS_FIELD_CACHE.put(clazz, fieldMap); } } } return CLASS_FIELD_CACHE.get(clazz); } // 类型兼容性检查(支持自动装箱/拆箱) private static boolean isCompatibleTypes(Class<?> sourceType, Class<?> targetType) { // 处理基本类型和包装类的兼容性 if (sourceType.isPrimitive()) { sourceType = primitiveToWrapper(sourceType); } if (targetType.isPrimitive()) { targetType = primitiveToWrapper(targetType); } return targetType.isAssignableFrom(sourceType); } // 基本类型转包装类 private static Class<?> primitiveToWrapper(Class<?> primitiveType) { if (boolean.class.equals(primitiveType)) return Boolean.class; if (byte.class.equals(primitiveType)) return Byte.class; if (char.class.equals(primitiveType)) return Character.class; if (double.class.equals(primitiveType)) return Double.class; if (float.class.equals(primitiveType)) return Float.class; if (int.class.equals(primitiveType)) return Integer.class; if (long.class.equals(primitiveType)) return Long.class; if (short.class.equals(primitiveType)) return Short.class; if (void.class.equals(primitiveType)) return Void.class; return primitiveType; } } 加注释 防止无限递归,两个类互相引用
最新发布
06-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值