当前位置: 技术问答>java相关
关于Thinking in java这本书中的问题!高手进来!
来源: 互联网 发布时间:2015-06-13
本文导语: 最近开始看thinking in java。 在thinking in java中第49页,发现这样的问题。 为什么以下的结果是false? class Value{ int i; } public class EqualsMethod2{ public static void main(String[] args){ Value v1 = new Value(); Value v2 = ...
最近开始看thinking in java。
在thinking in java中第49页,发现这样的问题。
为什么以下的结果是false?
class Value{
int i;
}
public class EqualsMethod2{
public static void main(String[] args){
Value v1 = new Value();
Value v2 = new Value();
v1.i=v2.i=100;
System.out.println(v1.equals(v2));
}
}
还有,句柄指的是什么??
在thinking in java中第49页,发现这样的问题。
为什么以下的结果是false?
class Value{
int i;
}
public class EqualsMethod2{
public static void main(String[] args){
Value v1 = new Value();
Value v2 = new Value();
v1.i=v2.i=100;
System.out.println(v1.equals(v2));
}
}
还有,句柄指的是什么??
|
因为class Value的父类是java.lang.Object。而class Value没有重载方法
equals(),所以eauals()实现的是Object的缺省如下:
public boolean equals(Object obj) {
return (this == obj);
}
正是句柄的比较。
equals(),所以eauals()实现的是Object的缺省如下:
public boolean equals(Object obj) {
return (this == obj);
}
正是句柄的比较。
|
当然,v1.equals(v2)比较两个对象引用
而(v1.i).equals(v2.i)比较两个值;
句柄是翻译的问题,我觉得referance翻译成引用更好
而(v1.i).equals(v2.i)比较两个值;
句柄是翻译的问题,我觉得referance翻译成引用更好
|
引用,你就当是内存地址啦。
v1,v2的内存地址你认为一样么,当equals默认比较内存地址时,当然返回
false了。
v1,v2的内存地址你认为一样么,当equals默认比较内存地址时,当然返回
false了。
|
v1和v2是2个不同的对象,当然不同了!
|
v1和v2这两个对象是不同的,因为内存地址是不同的,而v1.equals(v2)比较的是两个对象引用,所以结果是false
我理解的句柄是引用
我理解的句柄是引用
|
v1,v2内存地址不同。
|
==和equals是经常让人搞错的,就看equals有没有重载。很多时候要分别试一下。