2016-12-06 58 views
-2

似乎字符串比較不能簡單地用「==」操作來完成,因爲我從解釋,在Java和C#閱讀:差異,C++,C#和Java

在Java中,我看到這個解釋:

== tests for reference equality (whether they are the same object). 
.equals() tests for value equality (whether they are logically "equal"). 

在C#中我看到這樣的代碼:

if (parametrii[0].Equals("teach"))// to check the equality of values 

這是有道理的,我認爲 「==」 是檢查地址和.equal的()僅僅是檢查值。

但是我已經在Python和C++所有的時間一直在使用 「==」 我從來沒有遇到的例子

在Python中這樣的錯誤:

string1 = "helloworld" 
string2 = "helloworld" 

print(string1 == string2)// result true 

在C++:

while(getline(ifs, line2)){ 
     stringstream ssm(line2); 
     string from_stop; 
     string to_stop; 
     getline(ssm, from_stop, ','); 
     getline(ssm, to_stop, ','); 
     if(from_stop == to_stop){ 
      adjList[from_stop].push_back(to_stop); 
      } 
     } 

  bool stop124 = false; 
      bool stopA24 = false; 
      bool stop126 = false; 
      for (int i = 0; i < adjVec.size(); i++) { 
       if (adjVec[i] == "124") stop124 = true; 
       else if (adjVec[i] == "A24") stopA24 = true; 
       else if (adjVec[i] == "126") stop126 = true; 
      } 

這些代碼將成功編譯並獲得比較值的正確結果。我知道在C++中有一個strcmp()函數,但我很少使用它,並且不知道何時使用它而不是==來檢查兩個字符串是否相等。

所以我的問題是,這是因爲這些編程語言之間存在差異,或者只是我很幸運,我沒有遇到這些錯誤?

+0

誰說'=='檢查參考平等?情況並非總是如此。 (至少不在c#中) –

+0

@ M.kazemAkhgary引用引用了Java,它是真的。 – Servy

+2

如果你想知道'=='做什麼,比較字符串時,用不同的語言,查找每種語言的該運算符的文檔。他們都解釋到底是什麼。 – Servy

回答

0

由於Java不允許運算符重載,因此他們不得不求助於創建一個函數(Equals)來比較'true'對象是否相等 - 並讓運算符==執行指針比較。這種選擇不能由任何其他原因真正證明,因爲它保證不合邏輯的代碼,在通用的情況下更多的輸入(人們通常比較真正的平等,而不是指針相等)和更陡峭的學習曲線。

指針和對象之間明確區分的C++不受Java限制的約束,因此允許類和直觀形式的比較的適當的值語義。

+0

像往常一樣,古老的downvoter會解釋他們的原因嗎? – SergeyA

+0

我投了票,它幫助我理解,讚賞。 –

+0

關於drive-by downvote - 選項1.您正在分析Java,有人可能不喜歡那樣。選項2.在觸摸屏上滾動時,有時會意外擊中投票按鈕。可能這會導致意外上漲和下跌的平均分配,但沒有人會詢問隨機上漲。 :-) –

0

Python比較字符串的字典順序,即使用字符的ASCII值,因此您可以使用==運算符。 Java創建一個字符串對象,因此您必須使用.equals()方法來檢查值。

所以要回答你的問題,這是不同的語言。如果你想在C++中比較2個字符串,我會使用compare方法。

+0

這可以幫助我很多,你可以告訴我一些簡單的例子,當==給你錯誤和std :: string :: compare()的作品? –

+0

==不會給你一個錯誤。它將根據字符串返回一個布爾值。使用比較方法可以讓您更深入地瞭解字符串的不同之處。我建議你做一些關於C++如何工作的研究:) – BlackHatSamurai