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# 的奇怪行为)

C++ 与 Java/C# 比较

5月TIOBE编程语言:Python持续第一,C++将冲击前三

学习 正则表达式 js java c# python 通用

java比较两个字符串是否相等

C++ 命名空间,与 Java 包的比较