我是一个JAVA初学者,现在遇到一个关于两个对象相等的问题,代码如下,请问各位,为什么它们的值不相等?谢谢!class object1{
private double a;
public object1(double objecta){
a = objecta ;
}
}class object2{
private double b ;
public object2(double objectb){
b = objectb;
}
}
public class TwoObjects { public static void main(String[] args) {
object1 ob1 = new object1(100.00);
object2 ob2 = new object2(100.00);
if(ob1.equals(ob2)){
System.out.println("They're equal !");
}
}
}
private double a;
public object1(double objecta){
a = objecta ;
}
}class object2{
private double b ;
public object2(double objectb){
b = objectb;
}
}
public class TwoObjects { public static void main(String[] args) {
object1 ob1 = new object1(100.00);
object2 ob2 = new object2(100.00);
if(ob1.equals(ob2)){
System.out.println("They're equal !");
}
}
}
解决方案 »
- 局域网传递数据的问题??????
- 谢谢高手指点新手读取了txt文件的数如何求和把结果写回txt文件最后
- 怎么才算j2se基础扎实了?
- 高分请教数据集合问题(详情进入)
- 各位老大,小弟问一下,在java中写的单机版程序如何像金山词霸一样,每一个系统,同时只能有一个程序在跑??
- 哪里去下载Together for eclipse 6.2?
- 连接数据库后,怎么往数据库中写数据,即增加新的记录
- 怎样取得java中数组的长度
- 一般的用户权限管理要怎样划分?
- Finalize()函数能够象在c/c++中的析构函数一样最后自我调用吗?
- 求教关于一个多线程问题,谢谢了!
- 用MyEclipse新建Web Project时提示出错?
因为你的object1与object2是两个不同类的对象~~
object2 ob2 = new object2(100.00);是开辟了两个不同的内存地址,所以不相等。但用equals判断String、Date类型除外,它们只要值相等,地址不相同,也认为是相等的。
==用来判断基本数据类型的值相等,也可以用来判断引用数据类型,但两个引用数据类型的地址必须是同一个。
打开API看看Object类的equals方法
Object 类的 x.equals(y) 方法,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。
注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。 在你这段代码中 object1 ob1 = new object1(100.00);
object2 ob2 = new object2(100.00);
ob1和ob2没有应用自同一个对象(也不可能引用同一个对象)-他们是不同类型的变量一个object1类型,一个object2类型,所以对两个不是同一种类型的引用变量使用equals方法是没有意义的,当然二者肯定不相等
对于简单类型来说,a=3,b=3,我们可以说a和b相同,也可以说a和b相等,都没什么问题。
.equals()是Object的方法,可以理解为"相等"。显然两个object相等并不意味着相同;但是需要注意的是,也并不意味着他们对应内存区域的所有字节都相等,比如(但不限于这个原因)他们内部可能还有自己的引用。所以,两个对象是否相等,只有这个对象自己才知道如何判断,java并不知道。所以就需要该类自己提供一个equals方法由于JAVA中除基本数据类型外其它一切都是对象,而对象变量存储的都是引用,相当于C中的指针,所以在比较对象时如String,用==是比较两个变量是否指向同一个对象,而用equals才是比较两个String的内容是否相等
Object:
equals(Object obj)
指示某个其他对象是否与此对象“相等”。
这里的相等指的是对象存放的地址是否相等,你既然new了两个对象,那就是不同的地址了String:
public boolean equals(Object anObject)比较此字符串与指定的对象。当且仅当该参数不为 null,并且是表示与此对象相同的字符序列的 String 对象时,结果才为 true。继续努力!
这里面你的a和b是private的应该改public或者创建一个get方法。
equals
public boolean equals(Object obj)指示某个其他对象是否与此对象“相等”。
equals 方法在非空对象引用上实现相等关系: 自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。
对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。
传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。
一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。
对于任何非空引用值 x,x.equals(null) 都应返回 false。
Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。 注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。
参数:
obj - 要与之比较的引用对象。
返回:
如果此对象与 obj 参数相同,则返回 true;否则返回 false。
(在Object中的equals方法在比较两个对象时其实和“==”是相同的结果,除非你重写)
private double a;
public object1(double objecta){
a = objecta ;
} public double getA(){
return a;
}
} class object2{
private double b ;
public object2(double objectb){
b = objectb;
} public double getB(){
return b;
}}
public class TwoObjects { public static void main(String[] args) {
object1 ob1 = new object1(100.00);
object2 ob2 = new object2(100.00);
if(ob1.equals(ob2)){
System.out.println("They're equal !");
} System.out.println(obj1.getA()==obj2.getB());
}
}