java - Java Method 对象是否可以通过标识(即 ==)进行比较,还是必须使用 equals()?

标签 java reflection equality comparison-operators

在 Java 中,java.lang.reflect.Method 对象的实例可以通过身份进行比较(即 ==)还是我必须使用 equals()?

最佳答案

问题一般不是指==equals的区别,而是指java.lang.reflect.Method特别是实例。

这是一个合理的问题,因为假设每个 Method 仅存在 一个实例 是合理的 - 类似于 Class对象,它们在 JVM 中只创建一次

但是,情况并非如此:两个 Method 对象可能相等,即使它们不相同,正如所见在这个例子中(它也对 Class 对象进行比较,以强调它们确实 相同)

package stackoverflow;

import java.lang.reflect.Method;

public class MethodEquals
{
    public static void main(String[] args) throws Exception
    {
        checkMethods();
        checkClasses();
    }

    static void checkMethods() throws Exception
    {
        Method m0 = MethodEquals.class.getMethod("exampleMethod", int.class);
        Method m1 = MethodEquals.class.getMethod("exampleMethod", int.class);

        boolean identical = (m0 == m1);
        boolean equal = m0.equals(m1);

        System.out.println("Methods: "+(identical == equal)); // prints "false"
    }

    static void checkClasses() throws Exception
    {
        Class<?> c0 = Class.forName("stackoverflow.MethodEquals");
        Class<?> c1 = Class.forName("stackoverflow.MethodEquals");

        boolean identical = (c0 == c1);
        boolean equal = c0.equals(c1);

        System.out.println("Classes: "+(identical == equal)); // prints "true"
    }

    public float exampleMethod(int i)
    {
        return 42.0f;
    }
}

关于java - Java Method 对象是否可以通过标识(即 ==)进行比较,还是必须使用 equals()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28304161/

相关文章:

java - 在 SQL 数据库中存储 HashMap

scala - 如何检查 WeakTypeTag 或 Type 是否代表具体类型?

java - Google Web 工具包 Autobeans

java - Parceler 库是否使用反射?

java - Cordova插件错误

java - 如何读取与类名模式匹配的类(带或不带 extcos)?

java - 天花板和地板之间奇怪的平等

c# - 如何检查两个 Expression<Func<T, bool>> 是否相同

java - 给定一系列变量(A、B、C ...),如何形成 Sql 字符串 Ex "A=? and B=?...."但只考虑非空变量?

使用 strdup 从字符串转换的 c++ char* 不等于原始原始字符串