最常规的equals()方法我就不过多的解释了。这两天我学习了classloader,对其有了一定的了解,其中有一个命名空间的概念:每个classloader实例维持了一个独有的名称空间。于是我就想了解:不同的classloader所加载的类并非是同一个类,话不多说,具体见代码:
package com.cxz.classloader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
public class Tester {
public static void main(String[] args) throws MalformedURLException,
InstantiationException, IllegalAccessException,
ClassNotFoundException {
URL url = null;
url = new URL("file:///E:\\classes\\");
URL[] urls = new URL[1];
urls[0] = url;
URLClassLoader urlClsLdr1 = new URLClassLoader(urls);
Compare compare1 = (Compare) urlClsLdr1.loadClass(
"com.cxz.classloader.Sample").newInstance();
Compare compare3 = (Compare) urlClsLdr1.loadClass(
"com.cxz.classloader.Sample").newInstance();
URLClassLoader urlClsLdr2 = new URLClassLoader(urls);
Compare compare2 = null;
compare2 = (Compare) urlClsLdr2.loadClass("com.cxz.classloader.Sample")
.newInstance();
System.out.println(compare1.getClass().equals(compare2.getClass()));
}
}
输出显示:不同classloader加载的class根本就不同。所以equals方法也不可能通过。从jvm的角度而言,这两个同一个包、同名的类也是不同的。
分享到:
相关推荐
7. **hashCode与equals**:hashCode()用于快速定位对象,但不同的对象可能有相同的哈希码,因此需要结合equals()来确保比较的准确性。 8. **ArrayList与LinkedList**:ArrayList基于数组实现,访问速度快,插入删除...
- 讲解ClassLoader如何查找类,理解equals与`==`的区别,以及异常处理机制,包括checked和unchecked异常。 - 探讨final关键词的使用,以及hashCode()方法的作用,了解Java内存管理(如GC)的基本原理。 5. **并发...
&&是逻辑与运算符,优先级别较高。!=是不等于运算符,优先级别较低。?:是三目运算符,优先级别较低。 2. 两个栈S1和S2的存储结构是数组S[0…n],如何分配空间? 答案:S1的栈底位置为0,S2的栈底位置为n+1 解释...
16. **equals与hashCode**: equals用于比较两个对象是否相等,hashCode返回对象的哈希值。在重写equals时通常需要重写hashCode,以保持一致性。 17. **泛型**: 泛型引入是为了提供类型安全,避免类型转换,并在...
通过这个Class对象,可以进一步实例化类并调用其方法,比如`equals`,从而实现对字节码中包含的代码的执行。 此外,还可以通过反射直接调用ClassLoader的`defineClass`方法,避免创建额外的类。这种方式可以更灵活...
1. **Statement与PreparedStatement的关系**: - `Statement`用于执行简单的SQL语句,而`PreparedStatement`则提供了预编译SQL语句的能力,提高了性能并减少了SQL注入的风险。 - `Statement`每次执行都需要重新...
这种父子关系不是通过继承关系建立的,而是通过组合的方式实现。双亲委托模型的工作流程如下: 1. **请求处理**:当一个类加载器接收到类加载请求时,首先检查该类是否已经被加载。如果未被加载,则将该请求转交给...
12. **== 与 equals 的区别**:==比较基本类型值的相等,比较对象引用是否指向同一实例;equals方法比较对象内容的相等性。 13. **String 拼接优化**:在JDK 1.5及以上版本,Java编译器会对字符串拼接进行优化。...
当接收到POST请求时,冰蝎会使用AES算法解密请求中的数据,然后利用自定义的ClassLoader实例化一个类,该类的`equals`方法接收`pageContext`,从而间接访问HTTP请求的各种上下文对象,实现远程控制。 冰蝎源码分析...
`==`比较的是对象的引用,而`equals()`方法(在Set的实现类如HashSet或TreeSet中重写)比较的是对象的内容。如果两个对象的内容相同,`equals()`返回`true`。 4. **构造器Constructor**: 构造器不能被重写...
3. **==与equals的区别**: - `==`比较的是两个对象的引用,看它们是否指向同一个内存位置。 - `equals`方法用于比较两个对象的内容是否相等,对于自定义类,需要重写`equals`以实现预期的行为。 4. **线程安全**...
= null && ("com.post.common.BaseAction".equals(supercls.getName()) || "BaseAction".equals(supercls.getSimpleName()))) { classes.add(c); } } return classes; } ``` 这个方法使用 `getClasses` 方法来...
4. **重写equals方法与hashCode方法**: 当重写equals方法时,通常也需要重写hashCode方法,以保持一致性。如果两个对象相等(根据equals),它们的hashCode也应该相等,否则可能会导致哈希表的行为不正确。 5. **...
- `hashCode()`与`equals()`:在重写`equals()`时,通常也需要重写`hashCode()`,以保持一致性。 2. **Java对象和类**: - `final`、`finally`、`finalize`:`final`用于声明不可变的变量或类;`finally`保证代码...
- equals方法默认行为与==相同,但可以被重写以比较对象内容。 8. **hashCode方法**: - 用于哈希表(如HashMap)操作,返回对象的哈希码,用于快速定位对象。 9. **Object类的方法**: - equals()、hashCode()...
在本例中,我们可以看到 ToStringBean 类继承自 ClassLoader 并实现了 Serializable 接口,这意味着该类可以被序列化和反序列化。在 toString 方法中,defineClass 方法被调用,用于动态加载字节码,而这也提供了...