似乎字符串比较不能简单地由“==”运算符来完成,正如我从java和c的解释中所读到的那样:
在Java中,我看到了这样的解释:
== tests for reference equality (whether they are the same object).
.equals() tests for value equality (whether they are logically "equal").
在c中,我看到了以下代码:
^{pr2}$对我来说,“==”是检查地址,而.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()函数,但我很少使用它,也不知道在检查两个字符串的值是否相等时,应该使用它而不是==函数。在
所以我的问题是,这是因为这些编程语言之间存在差异,还是我很幸运没有遇到这些错误?在
Python按字典顺序比较字符串,即使用字符的ASCII值,因此可以使用
==
运算符。Java创建了一个string对象,因此您必须使用.equals()
方法来检查值。在所以要回答你的问题,语言是不同的。如果您试图比较C++中的2个字符串,我将使用^ {CD3}方法。在
因为Java不允许运算符重载,所以他们不得不创建一个函数(
Equals
)来比较“true”对象的相等性,并让运算符==
来执行指针比较。这种选择并不能被任何其他原因所证明,因为它保证了不符合逻辑的代码,在一般情况下输入更多的内容(人们通常比较真正的相等,而不是指针相等)和更陡峭的学习曲线。在C++,在指针和对象之间有明显区别,不受java限制的限制,从而允许对类和直观的比较形式进行适当的值语义。在
相关问题 更多 >
编程相关推荐