String类
在Java中比较两个String对象的内容是否相同时使用equals方法。
String str1=new String(“A”);
String str2=new String(“B”);
String str3=new String(“B”);
boolean result1= str1.equals(str2);
boolean result2= str2.equals(str3);
System.out.println(result1);
System.out.println(result2);
则result1为false,result2为true。
而在String类中使用“==”时,比较的是两个String对象的引用是否指向同一个对象。
String str1=new String(“B”);
String str2=new String(“B”);
String str3=str2;
boolean result1=(str1==str2);
boolean result2= (str2==str3);
System.out.println(result1);
System.out.println(result2);
则result1为false,result2为true。
result1为false因为str1、str2虽然内容相同但它们是不同的对象。而
result2为true是因为str2、str3是指向同一个String对象的。
再说明一点,
String str = new String("abc")和
String str ="abc"是有一点小区别的,对于new出来的String对象,是每new一个内存里生成一个,也就是说其允许存在内容相同的重复对象。而String str ="abc"这种形式是不允许存在内容相同的重复对象,只要内存已经存在了,就不再新生成,而是把新的引用指向原来的对象。
Object类
所有的Java类都继承Object类,所以通常默认继承Object类。
Object类的equals方法和“==”相同,都是比较两个对象引用是否指向同一个对象。
原因:String类继承Object类后,也继承了equals方法,但String类对equals方法进行了重写,改变了equals方法的比较形式。