我喜欢在比较值时不考虑变量是字符串还是数字,所以我不使用==,而不是===。但是因为==在比较之前将这两个值转换为相同的数据类型,它是否会在游戏中创建垃圾并加剧那些讨厌的垃圾收集短暂暂停?如果是这样,它是仅在将字符串与数字进行比较时,还是在将数字与数字和字符串与字符串进行比较时进行的?
答案 0 :(得分:0)
==
运算符只有在实际对对象进行类型转换时才会创建任何对象。如果比较相同类型的值,则无需为比较创建任何值。
但是,您应该尝试确保您的数据属于预期类型。将值放在变量中时,将值转换为一次,比每次使用它时隐式转换的值要便宜。
答案 1 :(得分:0)
是的,==
可以创建垃圾,因为它可能在执行类型强制时调用对象上的.toString()
或.valueOf()
方法;这些方法可能会破坏(它们可以是用户定义的)。
但不,==
在将(原始)字符串与(原始)数字进行比较时不会产生垃圾,在返回结果后,进程中分配的所有内存都可以(并且将会立即回收)。
请注意,如果您关心游戏的垃圾收集速度,那么您首先应该关注一致的值类型。这可能会加快你的游戏速度;当使用===
时,您可以确定没有创建垃圾。