2016-12-06 9 views
-2

JavaとC#でいることを私は説明から読み取るように、その文字列の比較は単純に「==」オペレータによって行うことができないようです説明:私はこのコードを見て違い、C++、C#と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でチェックしているだけの値をチェックしているように私には理にかなっています。 C言語で

string1 = "helloworld" 
string2 = "helloworld" 

print(string1 == string2)// result true 

++:

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); 
      } 
     } 
私はすべての時間++ PythonとCに "==" を使用してきたと私は例

Pythonで

ため、このようなエラーが発生したことがないしかし

または

  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()関数があることを知っていますが、ほとんど使用しないで、2つの文字列の値が等しいかどうかをチェックするのに、==を使うのではなく、いつ使うのかよく分かりません。

私の質問は、これらのプログラミング言語に違いがあるか、それとも私がそれらのエラーに遭遇しなかったのは私にとって幸運であるためです。

+0

'=='と言う人は、参照の平等をチェックしますか?それは必ずしもそうではありません。 (少なくともC#ではありません) –

+0

@ M.kazemAkhgary引用はJavaを参照しています。 – Servy

+2

'=='が何をしているか知りたいのであれば、文字列を異なる言語で比較するときは、各言語の演算子に関するドキュメントを参照してください。彼らはすべてそれが何を正確に説明します。 – Servy

答えて

0

Javaでは演算子のオーバーロードが許可されていないため、 'true'オブジェクトの等価性を比較するための関数(Equals)の作成に頼らざるを得ず、演算子==はポインタ比較を実行する必要がありました。この選択は、非論理的なコード、一般化されたケース(人は通常、ポインタの平等ではなく真の平等のために比較する)、より急な学習曲線でより多くのタイプ入力を保証するので、他の理由によって本当に正当化することはできません。

ポインタとオブジェクトの明確な区別を持つC++は、Javaの制限によって制約を受けるものではないため、クラスと直観的な比較形式のための適切な値セマンティクスが可能です。

+0

いつものように、敬虔なdownvoterはその理由を説明するでしょうか? – SergeyA

+0

私は投票しました、それは私の理解を助け、感謝します。 –

+0

drive-by downvoteについて - オプション1.あなたはJavaを軽視しています。誰かがそれを気に入らないかもしれません。オプション2.タッチスクリーンをスクロールすると、誤って投票ボタンを押すことがあります。おそらく、これは偶然のアップ/ダウンボケの均等な分布を引き起こすかもしれないが、誰もランダムアップフォースについては尋ねない。 :-) –

0

Pythonは文字列を辞書的に、つまり文字のASCII値を使用して比較します。したがって、==演算子を使用できます。 Javaでは文字列オブジェクトが作成されるため、値を確認するには.equals()メソッドを使用する必要があります。

質問にお答えするには、違う言葉です。 C++で2つの文字列を比較しようとしている場合は、compareメソッドを使用します。

+0

それは私をたくさん助けてくれます.C++でいくつかの簡単な例を表示できますか?==あなたにエラーとstd :: string :: compare()の動作を教えてください。 –

+0

==あなたにエラーはありません。文字列に応じてbool値を返します。 compareメソッドを使うと、文字列がどのように異なるかをより深く理解することができます。私はあなたがC++がどのように動作するかについていくつかの研究をすることをお勧めします:) – BlackHatSamurai

関連する問題