THINKING IN JAVA 里解释的很清楚啦。第一是新建了两个INT对象。使用的是封装器,==比较的是对象句柄。两个对象即使值一样,但却是两个独立对象。自然输出false。第二仍然是两个不同对象,equals比较的是对象的实际内容。所以尽管进行了赋值操作 ,但实际上V1,V2的对象内容还是不同的。只是V1.i与v2.i的内容相同而已。你打印出来就知道了。
System.out.println(V1)
System.out.println(V2)
System.out.println(V1.i)
System.out.println(V2.i)
System.out.println(V1)
System.out.println(V2)
System.out.println(V1.i)
System.out.println(V2.i)
解决方案 »
- 数据库更新语句出错!求解
- 【求助】JAVA编写图形界面程序,接受用户输入5个浮点数据和一个文件目录名,将这5个数据保存在文件中
- 关于java中if的问题
- 帮忙吧,同志们,我的问题一个人都不来回答,YM呀,,时间都有二天了,
- 请问applet有什么办法获得客户端机器的物理内存大小,在线急等!!!
- 朋友们这里有钱赚呀!加入就送50元!
- 大家来谈一下在java中怎样实现拖曳技术!
- 怎样把一个输入流保存为文件?请高手赐教
- 关于package的一个问题!!
- Map集合的value值不能重复??
- 有关结果数据集的修改-java和ORACLE数据库
- Jbuilder 7也太慢了吧,大家有什么好的方法呢,顺便谈谈公司老板给大伙的机子配置怎么样啊
2中,我觉得应该是true啊。
比的是n1,n2对象的地址
应该用n1.equals(n2)第二个问题,Java是但根继承结构,所有的非primitive类,都extends于Object,反编译你的类Value,你就知道了。所以Value就继承了Object的equals方法,但是这个方法还没有被你重载,这是 JDK 源代码 Object 的equals实现如下:
public boolean equals(Object obj) {
return (this == obj);
}
父类Object还不能很清楚你要如何比较,所以,他只判断地址是否相同
所以你要自己重载Value类的equals方法
试试下面的代码,就搞定了class Value {
int i;
public boolean equals(Object obj) {
return (this.i == ((Value)obj).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));
}
}