Java에서 java.lang.reflect.Method
개체의 인스턴스를 identity (ie ==)로 비교할 수 있습니까? 아니면 equals()를 사용해야합니까?Java Method 객체를 identity (즉. ==)로 비교할 수 있습니까? 아니면 equals()를 사용해야합니까?
3
A
답변
4
일반적으로 ==
과 equals
의 차이는 아니지만 특히 java.lang.reflect.Method
인스턴스를 나타냅니다. JVM을 정확히 한 번 만들어집니다 Class
객체, 유사 - 각 Method
의 하나의 인스턴스이 존재한다고 가정하는 것이 정당화 될 수 있기 때문에
그것은 합리적인 질문입니다.
그러나, 이러한 경우가이 예에서 볼 수 있듯이 그들은, 동일하지 않더라도, 두 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;
}
}
+0
_real_ 답변은 'exampleMethod'의 반환입니다. –
달성 할 수있는 작업에 따라 다를 수 있습니다. 'Method.equals()'의 의미는 [javadocs] (http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Method.html#equals%28java)에서 설명합니다. lang.Object % 29) – DNA
이 질문이 잘못되었다고 생각합니다. OP는'java.lang.reflect.Method' 클래스에 대해 묻습니다. java.lang.refass.Method 클래스는 java.lang.Class 클래스와 거의 같은 generic == vs equals()가 아닙니다. –
@Magnamag 경우는 동일합니다. '=='이 아니라 객체 참조에 대해 'equals'를 사용하십시오. '=='를 사용할 수 있는지 확인하려면 테스트를 작성하십시오. 이 나쁜 질문들로 사이트가 오염 될 수있게 해줘서 고마워요. –