cha*_*arn -2 string comparison symbols equals go
for i:=0;i<len(a);i++{
if a[i] != b[i]{
return false
}
}
Run Code Online (Sandbox Code Playgroud)
只是
a == b
Run Code Online (Sandbox Code Playgroud)
我发现相同的字符串有不同的地址
a := "abc"
b := "abc"
println(&a)
println(&b)
Run Code Online (Sandbox Code Playgroud)
答案是:
0xc420045f68
0xc420045f58
所以==不使用地址进行比较.
事实上,我想知道如何==比较两个字符串.
我在网上搜索了很长时间.但失败了......
您应该使用==运算符来比较字符串.它比较string值的内容.
你打印的是地址a和b变量.由于它们是2个不同的非零大小变量,因此根据定义它们的地址不能相同.他们持有的价值当然可能相同,也可能不同.该==运营商比较变量保存值的变量而不是地址.
如果b字符串短于a,则使用循环的解决方案甚至可能导致运行时出现紧急情况,因为您使用有效值进行索引a.
内置==运算符可能总是优于任何循环,因为它是在体系结构特定的汇编代码中实现的.它在runtime包中实现,未导出的功能memequal().
另请注意,如果内置比较字符串指向相同数据(并且长度相等),则内置比较甚至可能省略检查文本的实际内容.没有理由不使用==.
string值的自定义相等函数有意义的唯一原因是知道字符串的启发式.例如,如果您知道所有字符串值具有相同的前缀,并且它们的最后一个字符可能不同.在这种情况下,您可以编写一个比较器函数,该函数仅比较字符串的最后一个字符以确定它们是否相等(并且只有,可选地还原为实际比较其余字符串).这个解决方案当然不会使用循环.