之前讲到对比两个对象的内存地址是可以用equals()方法或者==的
但为什么String对象用equals()方法只能对比内容而不能对比内存地址呢?
String 中的equals 方法是被重写的 如果不理解 你可以去直接看一下源码 你就会找到了
因为String类中的euqals方法就是重写的
String Str1=new String("runoob");和String Str1="runoob";的区别在于:String Str1=new String("runoob")是在堆中创建一个对象(也可以理解为新的地址)然后将常量池中的runoob付给创建的对象(地址)最后将对象(地址)从堆中付给栈中的Str1,由于在堆中创建了新的地址所以将原来栈中的地址代替掉,String Str1="runoob"是直接从堆中的常量池中取将runoob值直接赋给栈中的地址。
但是之前讲到比较两个对象的时候,用的equals()方法比较得是两个对象的地址是否相同呀,重写的equals()方法才是比较内容呀?
而且想请教一下String Str1=new String("runoob");和String Str1="runoob";的区别在哪呀?new String("runoob")这里面的runoob是参数吗?那String的有参构造方法是系统自带的吗?
equals()方法不是比对地址,是字符串与指定对象进行比较
public class Test { public static void main(String args[]) { String Str1 = new String("runoob"); String Str2 = Str1; String Str3 = new String("runoob"); boolean retVal; retVal = Str1.equals( Str2 ); System.out.println("返回值 = " + retVal ); retVal = Str1.equals( Str3 ); System.out.println("返回值 = " + retVal ); } }