已知类Student的定义如下:
   public class Student {
      String name;
      Student(String name) {
      this.name = name;
     }
     《插入代码》
    }
       main方法代码:
      Student stu1=new Student(new String(“tom”));
      Student stu2=new Student(“tom”);
      System.out.print(stu1==stu2);
      System.out.println(stu1.equals(stu2));
如果控制台的输出结果是false true,那么《插入代码》处填入的代码正确的是:A.public boolean equals(Object obj) {
           if (obj instanceof Student) {
               Student stu = (Student) obj;
               return stu.name==this.name;
          } else {
              return false;
          }
      }B.public boolean equals(Object obj) {
           if (obj instanceof Student) {
              Student stu = (Student) obj;
              return stu.name.equals(this.name);
          } else {
              return false;
          }
       }C.public boolean equals(Object obj) {
            if (obj instanceof Student) {
                return obj.name.equals(this.name);
           } else {
                return false;
          }
        }D.public boolean equals(Object obj) {
            if (obj instanceof Student) {
               return obj.name==this.name;
            } else {
               return false;
           }
        }答案:B
现问,为什么选b呢,其它选项为何不可呢,thanks

解决方案 »

  1.   

    A 由于new的和直接写的String 不是一个内存地址 == 比的只是变量的内存地址 所以错(具体见String的地址问题 你百度一下)B正确的C obj.name.equals(this.name); obj 没强制转换类型 这写法过不了编译D 同C
      

  2.   

    百度的关键字应该是 string equalshttp://zhidao.baidu.com/question/322203833.html
      

  3.   

    A 由于new的和直接写的String 不是一个内存地址 == 比的只是变量的内存地址 所以错(具体见String的地址问题 你百度一下)B正确的C obj.name.equals(this.name); obj 没强制转换类型 这写法过不了编译D 同C