A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. public class Test5 {
  2.         public static void main(String[] args) {
  3.                 String s = new String("hello");
  4.                 String s2 = "hello";
  5.                 System.out.println(s.equals(s2));//true
  6.                 System.out.println(s==s2);//false
  7.         }
  8. }
复制代码


第一个s.equals(s2) 不是没重写比较的是地址值么,难道一样????
第二个是因为字面值作为字符串对象和通过构造方法创建对象的不同,所以是false

4 个回复

倒序浏览
String类重写了equals方法,所以这里equals比较的是指,不是地址值。
回复 使用道具 举报
equals是object中的方法,在String中已经被重写过,比较的就是两个字符串对象的内容是否相等
回复 使用道具 举报
当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。 JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地 址,但在一些类库当中这个方法被覆盖掉了,如String,Integer,Date在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。
回复 使用道具 举报
前面答的很好了。 重写过是关键。      
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马