关于Dart中is类型测试运算符在DartPad中表现异常的问题咨询
为什么Dart中
double类型的3.0执行d is int会返回true? 先看你提供的代码:
void main() { // as // is // is! double d = 3.0; bool result = d is int; print(result); // prints true! }
这是Dart类型系统针对数字类型的特殊设计——is运算符对数字的判断逻辑,不仅看对象的运行时类型,还会校验其数值是否符合目标类型的取值要求。
- 当
double变量的值是整数(小数部分为0,比如3.0),Dart判定它可以无损转换为int类型,因此d is int返回true。 - 若
double的值带有非零小数部分(比如3.5),d is int则会返回false。
如果需要严格判断对象的实际运行时类型(而非值的兼容性),可以使用runtimeType属性:
void main() { double d = 3.0; print(d.runtimeType == int); // 输出 false print(d.runtimeType == double); // 输出 true }
这个设计是为了简化实际开发场景:比如从JSON这类数据源读取的数字通常都是double类型,但其中不少是整数值,用is int可以快速判断该值是否能安全转换为int,省去额外的数值校验步骤。
内容的提问来源于stack exchange,提问作者Nerdy Bunz
相关产品推荐
相关产品推荐

