为啥将 var Empty 与零值 var Integer 进行比较时,“=”运算符结果为真?

Posted

技术标签:

【中文标题】为啥将 var Empty 与零值 var Integer 进行比较时,“=”运算符结果为真?【英文标题】:Why "=" operator results True when comparing varEmpty with a zero evalued varInteger?为什么将 var Empty 与零值 var Integer 进行比较时,“=”运算符结果为真? 【发布时间】:2018-12-27 13:42:18 【问题描述】:

当将varEmpty Variant 变量与零值varInteger Variant 变量进行比较时,为什么= 运算符会产生True

var
  V1 : Variant;
  V2 : Variant;
begin
  V2 := 0;
  if(V1 = V2)
  then ShowMessage('V1 = V2')
  else ShowMessage('V1 <> V2');
end;

此代码产生以下输出:

V1 = V2

相等运算符= 是否只检查Variant 变量的值部分?

【问题讨论】:

【参考方案1】:

为了进行比较,将空变量转换为整数。根据variant type conversion rules,未分配的(空)变量被转换为0。因此表达式返回true。

【讨论】:

以上是关于为啥将 var Empty 与零值 var Integer 进行比较时,“=”运算符结果为真?的主要内容,如果未能解决你的问题,请参考以下文章

变量的基本类型与零值-GOLANG

bool, int, float与零的比较

double类型与零值比较时不能用==和!=,但>=和<=可以吗?

php switch 为啥 bool TRUE 被判断为了 int 1,NULL 成了 string '',而 bool FALSE 正常?

Swift: let 未初始化,但 var 已初始化。为啥? [复制]

kubernetes 初始化报错 /var/lib/etcd is not empty