==是否创建垃圾?(将字符串与数字进行比较时)

Does == create garbage ? (when comparing a string to a number)

本文关键字:数字 比较 创建 是否 字符串      更新时间:2023-09-26

我喜欢在比较值时不考虑变量是字符串还是数字,所以我使用==,而不是==。但是,由于==在比较之前将两个值转换为相同的数据类型,这是否会产生垃圾并加剧游戏中那些讨厌的垃圾收集短暂暂停?如果是,它是仅在将字符串与数字进行比较时,还是也在将数字与数字和字符串与字符串进行比较时?

是的,==可以创建垃圾,因为它在执行类型强制时可能会调用对象上的.toString().valueOf()方法;并且这些方法可能会运行浩劫(它们可以是用户定义的)。

但不,==在将(基元)字符串与(基元的)数字进行比较时不会创建垃圾,返回结果后,可以(也将)立即回收进程中分配的所有内存。

请注意,如果您关心游戏的垃圾收集速度,那么您应该首先关心一致的值类型。这可能会加快你的游戏速度;并且当使用===时,可以确保没有创建垃圾。

==运算符只有在实际对对象进行类型转换时才会创建任何对象。如果比较相同类型的值,则无需为比较创建任何值。

但是,您应该尝试确保您的数据是预期类型的。当你把一个值放在一个变量中时,转换一次它比每次使用时都隐式转换它更便宜。