2016-12-06 125 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