程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> string-關於Java中 源代碼 String 類中的 equals

string-關於Java中 源代碼 String 類中的 equals

編輯:編程綜合問答
關於Java中 源代碼 String 類中的 equals
public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String) anObject;
        int n = value.length;
        if (n == anotherString.value.length) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = 0;
            while (n-- != 0) {
                if (v1[i] != v2[i])
                        return false;
                i++;
            }
            return true;
        }
    }
    return false;
}

第二行的 this指的是什麼?

這還有一個擴展的程序

public class EqualsTest
{
public static void main(String[] args)
{
Student s1 = new Student("zhangsan");
Student s2 = new Student("zhangsan");

    System.out.println(s1 == s2);
    System.out.println(s1.equals(s2));      
}

}

class Student
{
String name;

public Student(String name)
{
    this.name = name;
}

public boolean equals(Object anObject)
{
    if(this == anObject)
    {
        return true;
    }

    if(anObject instanceof Student)
    {
        Student student = (Student)anObject;

        if(student.name.equals(this.name))
        {
            return true;
        }
    }

    return false;
}

}

這個程序中student.name 指的是s1還是s2

new對象的時候不是new 了兩個對象嗎

最佳回答:


package com.answer;

public class Student {
public static void main(String[] args) {
Student s1 = new Student("zhangsan");
Student s2 = new Student("zhangsan");
System.out.println(s1 == s2); // == 比較的是內存結果

  System.out.println("調用equal方法前");
  System.out.println(s1.equals(s2));   // 根據重寫的equal方法進行判斷
  System.out.println("調用equal方法後");
  System.out.println(s1);
  System.out.println(s2);    // 觀察輸出 內存地址不同

}
String name;
public Student(String name)
{
this.name = name;
}

public boolean equals(Object anObject)
{
System.out.println("調用equal方法");
// this 在這裡是s1 與 s2 內存地址不同 不成立
if(this == anObject)
{
return true;
}
// s2是Student類的對象 if條件成立
if(anObject instanceof Student)
{
// 類型轉換
Student student = (Student)anObject;

      // 都等於zhangsan 返回true
      if(student.name.equals(this.name))
      {
          return true;
      }
  }

  return false;

}
}

運行結果:
圖片說明

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved