在我的应用程序中obj.getClass().isArray()
被频繁调用并成为应用程序的瓶颈。
我想在运行时有效地检查对象是否是数组。
原始数组和对象数组应返回 true。
我能想象的方式是instanceof
所有原始数组,但不能处理 int[][] 等类型。并且该应用程序用作库,因此我无法列出所有类型。
有什么线索吗?
我刚刚完成的基准测试给出了以下结果:
{s instanceof Object[]} spends 44ms
{s.getClass().getName().charAt(0) == '['} spends 58ms
{s.getClass().isArray()} spends 303ms
基准测试已使用完成基准测试.java http://pastebin.com/pskJ1tSy,调用主程序.java http://pastebin.com/KbptdWaB.
在讨论了使用final
上述基准测试中的变量,请使用本地变量查看新结果:
{s instanceof Object[]} spends 83ms
{s.getClass().getName().charAt(0) == '['} spends 93ms
{s.getClass().isArray()} spends 354ms
即使持续时间都长一点(有趣的是),它们的顺序也被保留。
然后用这个新的方法调用 Benchmark.java主程序.java http://pastebin.com/nisMGtnP.
并使用一个用 this other 调用的原始数组主程序.java http://pastebin.com/n5q8ZCyj:
{a instanceof int[]} spends 71ms
{a.getClass().getName().charAt(0) == '['} spends 82ms
{a.getClass().isArray()} spends 340ms
仍然是相同的结果顺序。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)