import java.util.*;class ghyghost {
int i;}public class abc { public static void main(String[] args) {
Integer abc = new Integer(10);
Integer xyz = new Integer(10);
System.out.println(abc.equals(xyz)); ghyghost aa = new ghyghost();
ghyghost bb = new ghyghost();
aa.i = bb.i = 100;
System.out.println(aa.equals(bb));
}
} // /:~最近在看T I J(第二版)这本书,有一个例子,,
结果为true false问题是:书上讲equals缺省是引用比较,99页。。
我的想法总和这个结果不一样,请各位高手讲一讲,,这里面是什么原理,感谢:)请教了。
int i;}public class abc { public static void main(String[] args) {
Integer abc = new Integer(10);
Integer xyz = new Integer(10);
System.out.println(abc.equals(xyz)); ghyghost aa = new ghyghost();
ghyghost bb = new ghyghost();
aa.i = bb.i = 100;
System.out.println(aa.equals(bb));
}
} // /:~最近在看T I J(第二版)这本书,有一个例子,,
结果为true false问题是:书上讲equals缺省是引用比较,99页。。
我的想法总和这个结果不一样,请各位高手讲一讲,,这里面是什么原理,感谢:)请教了。
解决方案 »
- 当今任何一个被广泛使用的操作系统是否都内置了jvm(java虚拟机)?
- java的clone对象
- java初学者,向各位前辈请教:有关异常处理的问题
- 关于对象数组的问题?
- 求HashMap问题!!!
- 请问一下这是怎么回事啊!!
- HTML页面提交的值,JAVASCRIPT如何取得,我需要实现JAVASC RIPT操作数据库,表单中提交的内容,插入数据库,现在我不能取到提交后的值,没有后
- Eclipse为什么不能显示文字呢?
- 怎样在java中读取Excel文件。(急急急,在线等,解决了立刻给分)
- Vector的方法是不是synchronized的方法?
- 在java中调用sqlserver存储过程的问题?
- JAVA面试题求解!
Integer xyz = new Integer(10);
System.out.println(abc.equals(xyz));
----------------------------
这段代码由于都创建了10这个常数,所以在JAVA的常量池中只有一个位置的10,这时abc和xyz在编译器智能编译的情况下都指向了10这个内存位置,所以讲:书上讲equals缺省是引用比较。。这句话是对的。。
再看这段代码:
ghyghost aa = new ghyghost();
ghyghost bb = new ghyghost();
aa.i = bb.i = 100;
System.out.println(aa.equals(bb));
------------------------------------------------------
还是这句话:书上讲equals缺省是引用比较~~。如果按照这句话的意思,肯定是false了,因为是二个对象,不知道这么解释对不对??
难道用户自定义的类的对象没有常量池这个概念??如果这样就解释通了,,还请各位高手帮忙解释一下。。
int i;}public class abc { public static void main(String[] args) {
Integer abc = new Integer(10);
Integer xyz = new Integer(10);
System.out.println(abc.equals(xyz)); ghyghost aa = new ghyghost();
ghyghost bb = new ghyghost();
aa.i = bb.i = 100;
System.out.println(aa.equals(bb)); aa = bb;
System.out.println(aa.equals(bb));
}
} // /:~
true
false
true
书上讲equals缺省是引用比较~~。
这句话完全正确呀,呵呵
public boolean equals(Object obj)
Compares this object to the specified object. The result is true if and only if the argument is not null and is an Integer object that contains the same int value as this object.
int i;}public class abc { public static void main(String[] args) {
Integer abc = new Integer(10);
Integer xyz = new Integer(10);
System.out.println(abc.equals(xyz));
System.out.println(abc==xyz); ghyghost aa = new ghyghost();
ghyghost bb = new ghyghost();
aa.i = bb.i = 100;
System.out.println(aa.equals(bb)); aa = bb;
System.out.println(aa.equals(bb));
}
} // /:~true
false
false
true
呵呵,看来我理解有误 呀,,,,答案第二行false是结果,,说明abc和xyz是二个对象,并没有指向同一个10的常量池地址。难道类Integer真的在内部override了equals??期待其它朋友帮忙,请教了:)
JAVA的类基本上都重写了这个方法
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
类Integer重写了equals方法,在JDK代码中找到的。。呵呵,,不知道是不是最后的答案
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}