public class testEquals
{
public static void main(String args[])
{
testEquals a = new testEquals();
testEquals b = new testEquals();
testEquals c = b;
if(a == b)
System.out.println("==a和b内存指向相同");
if(b == c)
System.out.println("==b和c的内存指向相同");
if (a.equals(b))
System.out.println("a和B equals比较内容相同");
if (b.equals(c))
System.out.println("B和C equals比较内容相同");
}
}
运行结果为: ==b和c的内存指向相同 B和C equals比较内容相同
代码如上 很简单的,就是问下equals不是比较内容是否相同的么?为什么都是默认的初始化 比较结果缺不同呢?作者: 徐升2013 时间: 2013-3-9 22:37
又写了第二个代码,还是不行,代码如下,求解答- -
public class testEquals
{
testEquals(String sm){}
public static void main(String args[])
{
testEquals a = new testEquals("java");
testEquals b = new testEquals("java");
if (a.equals(b))
System.out.println("内容相同");
}
} 作者: 张宁 时间: 2013-3-9 23:00
==可用于基本类型和引用类型:当用于基本类型时候,是比较值是否相同;当用于引用类型的时候,是比较对象是否相同
如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内存(堆内存),变量也占用一块内存,例如Objet obj =new Object();变量obj是一个内存,new Object()是另一个内存,此时,变量obj所对应的内存中存储的数值就是对象占用的那块内存的首地址。对于指向对象类型的变量,如果要比较两个变量是否指向同一个对象,即要看这两个变量所对应的内存中的数值是否相等,这时候就需要用==操作符进行比较。
equals方法是用于比较两个独立对象的内容是否相同,它比较的两个对象是独立的。
a 和 b 存的是地址,你new 了两个对象,这两个对象在内存中分别开辟了空间,a 和 b 的值 是这两个不同空间的地址,当然不同了。作者: wodeairenw 时间: 2013-3-9 23:11
Objeck类中equals(Object obj)方法 :指示其他某个对象是否与此对象“相等”。 作者: 戴乾刚 时间: 2013-3-9 23:12
如果你创建的是Integer等对象的话,确实是你说的那样,那时因为Integer类复写了equals()方法
而testEquals类的equals()方法是直接继承自Object类,比较的还是引用类型的值,也就是所指向对象的内存地址值。作者: 黄涵峰 时间: 2013-3-9 23:13
a.equals(b);
具体结果是什么,要参照a,b的类型做决定。
如果是自己写的新类型,那默认比较的是对象的首地址是否一样。
如果是比较基本数据类型(Integer、String、...)这些,最好是查看API文档,它们有对equals进行了复写,比如Integer是比较数值是否相等,String比较内容作者: 张卫刚 时间: 2013-3-9 23:46
1:equals()比较的是内存地址值(也叫hash码),内存地址值是在创建对象的时候分配的
2:都是默认的初始化,比较结果缺不同呢?:你上面new对象,没有显示赋值,默认为null;
3:对象==也是比较地址值,你明白了吧
testEquals a = new testEquals();//new一次堆中就开辟了块空间
testEquals b = new testEquals();//new一次堆中就开辟了块空间 地址值肯定就不同了
testEquals c = b; //c指向b 地址值就是同一个
所以结果你应该懂了
if(a == b)false
if(b == c)true
if (a.equals(b))false
if (b.equals(c))true作者: 樊玲 时间: 2013-3-9 23:52
一般euqals 没有被重写时,自己定义的类,默认继承Object类。在Object类中,equals 与== 作用是相同的。都是比较句柄地址。
声明格式为: public boolean equals(Object obj)
所以equals的比较规则为:当参数obj引用的对象与当前对象为同一个对象时,就返回true,否则返回false.
楼主new了两个不同的对象,a与b. 并在栈内存中开辟两个空间,指向a,b。所以a,与b不为同一个对象。 testEquals c = b;这里,把b的地址值给了c,故,b.equals(c)为true.
所以结果为:==b和c的内存指向相同 B和C equals比较内容相同作者: 樊玲 时间: 2013-3-9 23:53