为了账号安全,请及时绑定邮箱和手机立即绑定

==和equals()方法

之前讲到对比两个对象的内存地址是可以用equals()方法或者==的

但为什么String对象用equals()方法只能对比内容而不能对比内存地址呢?

正在回答

5 回答

String 中的equals 方法是被重写的 如果不理解  你可以去直接看一下源码 你就会找到了

0 回复 有任何疑惑可以回复我~

因为String类中的euqals方法就是重写的

0 回复 有任何疑惑可以回复我~

String Str1=new String("runoob");和String Str1="runoob";的区别在于:String Str1=new String("runoob")是在堆中创建一个对象(也可以理解为新的地址)然后将常量池中的runoob付给创建的对象(地址)最后将对象(地址)从堆中付给栈中的Str1,由于在堆中创建了新的地址所以将原来栈中的地址代替掉,String Str1="runoob"是直接从堆中的常量池中取将runoob值直接赋给栈中的地址。

0 回复 有任何疑惑可以回复我~
#1

奶尤糯米团子 提问者

好的好的 那什么时候应该用第一种什么时候应该用第二种呢?
2020-02-23 回复 有任何疑惑可以回复我~

但是之前讲到比较两个对象的时候,用的equals()方法比较得是两个对象的地址是否相同呀,重写的equals()方法才是比较内容呀?

而且想请教一下String Str1=new String("runoob");和String Str1="runoob";的区别在哪呀?new String("runoob")这里面的runoob是参数吗?那String的有参构造方法是系统自带的吗?

0 回复 有任何疑惑可以回复我~

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 );  
     }
      }
0 回复 有任何疑惑可以回复我~
#1

奶尤糯米团子 提问者

但是之前学习对象那一节的时候,用equals()比较两个对象时,他说的是在对比内存地址是否一样呀?
2020-02-20 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Java入门第三季
  • 参与学习       409792    人
  • 解答问题       4340    个

Java中你必须懂得常用技能,不容错过的精彩,快来加入吧

进入课程

==和equals()方法

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信