'+'和'&'在字符串拼接中有什么区别吗?

5

我最近才意识到VBA还支持使用运算符+来连接String类型,而不仅仅是&。 因此,如果

Dim a As String, b As String
a = "Stack "
b = "Overflow"

以下语句将产生相同的结果:
>> a + b '--> "Stack Overflow"
>> a & b '--> "Stack Overflow"

在我的有限经验中,我从来没有发现任何一种语言中有两个运算符总是做相同的事情。我感觉VBA倾向于与其他常见语言合并(只使用+连接字符串),但仍支持&给老派VB开发人员使用。
但这听起来不像是一个技术解释,所以我想问以下问题:这两个运算符之间是否有任何实际区别?在使用+而不是&时是否会产生不同的结果?

我所想到的

我所想到的可能是一个“类似答案”,但在网络上找不到。它受JavaScript的启示,你可以几乎在任何地方使用=====具有相同的行为,除了身份(===)运算符的行为与等式(==)运算符完全相同,除了不进行类型转换,且类型必须相同才被视为相等。

我不确定VBA,但在其他/旧版本的Basic中,对字符串使用+会导致它检查它们是否为数字文本字符串,如果是,则将它们转换为数字,相加,然后再转换回来。 - RBarryYoung
@RBarryYoung 我也曾这样想过,但是如果 a = "1"b = "2",那么执行 a+ba & b 都会得到 "12"。因此我认为这与此无关,即使这本来是合理的。 - Matteo NNZ
1个回答

5

好的,我找到了。试一下这个:

Debug.Print "3" + 4 '--> 7

并将其与以下内容进行比较:

Debug.Print "3" & 4 '--> "34"

啊!现在看到区别了吗?使用&+的选择会影响这些表达式操作数的默认类型强制转换。

+将尝试将String转换为Numeric,如果可能,将把它们视为这样处理。另一方面,&会继续将元素视为String,即使它们都可以转换为Numeric


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接