繁体   English   中英

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

[英]Can the Java Method object be compared by identity (ie. ==) or do I have to use equals()?

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

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

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

然而,这不是这种情况:两个Method对象可以是equal ,即使它们是不相同的 ,如在此示例中可以看出(它也做为比较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;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM