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