java吧 关注:1,280,142贴子:12,798,334
  • 0回复贴,共1

为什么动态代理对象和原对象地址相同 ==却显示false?

只看楼主收藏回复

package Model;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public interface Person
{
public String getName();
}
class PerImp implements Person
{
public String name;
public PerImp(String name)
{
this.name = name;
}
@Override
public String getName()
{
return this.name;
}
@Override
public String toString()
{
return "name: "+this.name;
}
}
class Tes
{
public static void main(String[] args)
{
Person p1 = new PerImp("alex");
Person p2 =(Person)Proxy.newProxyInstance(p1.getClass().getClassLoader(), p1.getClass().getInterfaces(), new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
{
if(method.getName().indexOf("getName")>=0)
{
return "dasdasdsaasdasdasdsad";
}
return method.invoke(p1,args);
}
});
System.out.println(p1);
System.out.println(p2);
System.out.println("=================");
System.out.println(p1.getName());
System.out.println(p2.getName());
System.out.println("=================");
System.out.println(p1.hashCode());
System.out.println(p2.hashCode());
System.out.println("=================");
System.out.println(p1==p2);
}
}
显示结果是
name: alex
name: alex
=================
alex
dasdasdsaasdasdasdsad
=================
2129789493
2129789493
=================
false


IP属地:北京1楼2019-11-04 17:58回复