python、c++、c#、java中字符串比较的区别
Posted
技术标签:
【中文标题】python、c++、c#、java中字符串比较的区别【英文标题】:Differences among string comparisons in python, c++, c# and java 【发布时间】:2016-12-06 19:14:41 【问题描述】:似乎字符串比较不能简单地由“==”运算符完成,因为我从 java 和 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() 只是检查值,这对我来说是有意义的。
但是我一直在 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() 函数,但我很少使用它并且不太清楚何时使用它而不是 == 来检查两个字符串的值是否相等。
所以我的问题是,这是因为这些编程语言之间存在差异,还是我很幸运没有遇到这些错误?
【问题讨论】:
谁说==
检查引用相等?情况并非总是如此。 (至少在 c# 中没有)
@M.kazemAkhgary 这句话是指 Java,这是真的。
如果您想知道==
的作用,在比较不同语言的字符串时,请在每种语言中查找该运算符的文档。他们都准确地解释了它的作用。
【参考方案1】:
由于 Java 不允许运算符重载,他们不得不求助于创建一个函数 (Equals
) 来比较“真实”对象是否相等 - 并让运算符 ==
执行指针比较。这种选择不能以任何其他理由真正证明是合理的,因为它保证了不合逻辑的代码、在一般情况下更多的输入(人们通常比较真正的相等,而不是指针相等)和更陡峭的学习曲线。
在指针和对象之间有明确区别的 C++ 不受 Java 限制的约束,因此可以为类提供适当的值语义和直观的比较形式。
【讨论】:
像往常一样,尊敬的投票者会解释他们的原因吗? 我投了赞成票,它帮助我理解,感谢。 关于路过式投票 - 选项 1。您在贬低 Java,可能有人不喜欢这样。选项 2。在触摸屏上滚动时,您有时会不小心点击投票按钮。可能这会导致意外的赞成票和反对票的平均分布,但没有人询问随机赞成票。 :-)【参考方案2】:Python 按字典顺序比较字符串,即使用字符的 ASCII 值,因此您可以使用 ==
运算符。 Java 创建了一个字符串对象,因此您必须使用.equals()
方法来检查该值。
所以要回答你的问题是语言不同。如果您尝试在 C++ 中比较 2 个字符串,我会使用 compare
方法。
【讨论】:
这对我很有帮助,当 == 给你错误并且 std::string::compare() 有效时,你能告诉我一些 C++ 中的简单例子吗? == 不会给你一个错误。它将根据字符串返回一个布尔值。使用比较方法将使您更深入地了解字符串的不同之处。我建议您对 C++ 的工作原理进行一些研究 :)以上是关于python、c++、c#、java中字符串比较的区别的主要内容,如果未能解决你的问题,请参考以下文章
比较 c#、c++ 和 java 的性能(c# 的奇怪行为)