System.out.println(v1.equals(v2));
比较的是两个实例的地址,所以是false
比较的是两个实例的地址,所以是false
解决方案 »
- install4j发布Java程序时,程序引入的外部jar包处理办法
- 关于继承的小问题
- 题目:取一个整数a从右端开始的4~7位。
- Socket读取时抛错java.net.SocketException: Connection reset
- JarEntry类中getSize()方法返回值为NULL的问题
- Java中如何实现类似C++的多重继承
- JXL操作EXCEL公式的问题
- 关于全文检索工具lucene中怎样维护索引库.如何更新和删除一条索引,我眯了好久了,没找着答案.熟悉lucene的请进来拉我一把.
- 高手请进:一个关于线程同步的问题,是java线程笔记中作者提出的一个问题
- java能调用excel吗?
- 我刚刚学习JAVA,基本语法现象熟悉了,下一不我应该看什么书,那方面的
- 请问你公司的公司的java程序员。工资范围是多少?(西安的)工资最底的和最高的。?????请教!
比较的难道不是两个实例的地址?我知道你肯定要说是在比较对象,
但怎样区别这种情况呢?
你的这个测试用例写的很错屁呀。建议看看think in java
很正确,当一个类没有重载Object类地equals()方法时,如果在该类中调用equals()方法,那么系统就会只用Object地equals()方法,也就是从地址上比较两个对象是否相同.而Integer类已经重载了Object地equals()方法,所以在重载地方法中,是对Integer包含地值进行比较,所以返回true
而n1,n2却都是常量,故而其结果是相等的!!!!
例如String,int,long,double
java提供了类来构造它们
同时也重载了Object类的equals方法
就是说它们判断两个类是否相等是跟其他类的方法不同的
只要值相等就会判定未true
例如
String s1 = new String("1230");
String s2 = new String("1230");
s1 equals s2返回为true因为他们的值豆为"1230"而普通类的equals判断,只有两个reference指向同一个实例时
才会判定为true
例如: Value v1 = new Value();
Value v2 = new Value();
v1 equals v2返回为false
因为他们指向不是同一个实例
{
int i;
public Value(int j)
{
i=j;
} public int x()
{
return i;
} public boolean equals(Value v)
{
return (i==v.i);
}
}public class EqualsMethod
{
public static void main(String[] args)
{
Value v1=new Value(47);
Value v2=new Value(47); Integer n1 = new Integer(47);
Integer n2 = new Integer(47);
System.out.println(v1.equals(v2));
System.out.println(n1.equals(n2));
}
}