方法的比较"/>
Dog类的使用以及==和equals()方法的比较
我们在刚接触JAVA语言时,一直不太明白类以及类中域的的创建以及作用这些东西,然而对象又是什么东西。我通过一个小例子来了解一下它们的用处。
练习一:创建一个名为Dog的类,它包含两个String域:name和says。在main()方法中,创建两个Dog对象,一个名为spot(它的叫声为“Ruff!”),另一个名为scruffy(它的叫声为“Wurf!”)。然后显示他们的叫声和名字。
解答:(解答过程中使用的是eclipse平台)
import java.util.*;class Dog
{String name;String says;
}public class chapterThree
{public static void main(String[] args)
{Dog dog1 = new Dog();Dog dog2 = new Dog();dog1.name = "spot";dog1.says = "Ruff!";System.out.println("The first dog name's: " + dog1.name + " and it says " + dog1.says);dog2.name = "scruffy";dog2.says = "Wurf!";System.out.println("The second dog name's: " + dog2.name + " and it says " + dog2.says);}
}
运行结果如下:
由此我们可以看出所谓的域便是类中的成员变量,在这个案例中:Dog类中存在name和says两个成员变量。然后再使用new语句进行对象的创建:Dog dog1 = new Dog(); Dog dog2 = newDog();及两个对象分别为dog1和dog2。
所以我们再使用上面这个案例再比较一下 == 和 equals()的区别: 练习二:创建一个新的Dog索引,并对其赋值为spot对象。测试用 == 和 equals() 方法来比较所有引用的结果:
解答代码:(解答过程中使用的是eclipse平台)
class Dog
{String name;String says;public Dog(String name,String says){this.name=name;this.says=says;}
} public class test{public static void main(String[] args){Dog spot= new Dog("spot","Ruff!");Dog scruffy=new Dog("scruffy","wuff!");System.out.println(spot.name+" "+spot.says);System.out.println(scruffy.name+" "+scruffy.says);Dog spot1=spot;System.out.println("spot1==spot "+(spot1==spot));System.out.println("spot1.equals(spot) "+(spot1.equals(spot)));System.out.println("scruffy==spot "+(scruffy==spot));System.out.println("scruffy.equals(spot) "+(scruffy.equals(spot)));}
}
运行结果如下:
如果我们要计较两个对象的实际内容是否相同,此时,必须使用所有对象都适用的特殊方法equals()。但这个方法不适用于“基本类型”,基本类型直接使用 == 和 !=即可:
我们通过一个例子来了解:
public class EqualsMethod{public static void main(String[] args){Integer n1 = new Integer(47);Integer n2 = new Integer(47);System.out.println(n1.equals(n2));}
}
结果为: 结果正如我们预料的一样:
当创建了自己的类测试时,结果却不是这样的:
class Value
{int 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));}
}
结果为:
案例:编写一个接收两个字符串参数的方法,用各种布尔值的比较关系来比较这两个字符串,然后把结果打印。做==和!= 比较的同时,用equals()做测试。在main()方法中用几个不同的字符串对象调用这个方法。
public class lesson14 {public static void Compare(String Left,String Right) {System.out.println("Left = " + Left);System.out.println("Right = " + Right);System.out.println("Left == Right:" + (Left == Right)); //比较System.out.println("Left != Right:" + (Left != Right));System.out.println("Left.equals(Right):" + Left.equals(Right)); //用equals进行比较}public static void main(String[] args) {Compare("abc","abc"); //比较相同的字符串System.out.println();String s = "Hello";Compare(s,"Hello"); //比较引用和字符串System.out.println();Compare("s","Hello"); //比较不同的字符串}
}
测试结果:
两种结果不同,这是由于equals()的默认行为是比较引用,所以除非在自己的新类中覆盖equals()方法,否则不可能表达出我们希望的结果。
由此可以看出因为没有覆盖equals()方法,所以 == 和 equals()实质上是一样的,都是判断引用是否一样。
更多推荐
Dog类的使用以及==和equals()方法的比较
发布评论