【发布时间】:2011-06-26 18:21:20
【问题描述】:
我发现使用 getClass() 和 == 运算符比使用 instanceOf 运算符时性能有所提高。
Object str = new Integer("2000");
long starttime = System.nanoTime();
if(str instanceof String) {
System.out.println("its string");
} else {
if (str instanceof Integer) {
System.out.println("its integer");
}
}
System.out.println((System.nanoTime()-starttime));
starttime = System.nanoTime();
if(str.getClass() == String.class) {
System.out.println("its string in equals");
} else {
if(str.getClass() == Integer.class) {
System.out.println("its integer");
}
}
System.out.println((System.nanoTime()-starttime));
是否有任何指导方针,使用getClass() 或instanceOf 中的哪一个?
给定一个场景:我知道要匹配的确切类,即String、Integer(这些是最终类)等。
使用instanceOf 操作符是不好的做法吗?
【问题讨论】:
-
您的计时方法导致人为延迟并产生不正确的计时结果。交换您进行检查的顺序,您会看到您所做的第一次检查(== 或 instanceof)总是会更长。我猜它是 println()s。你永远不应该在你的时间块中包含这些东西。
-
只有一条评论,为了比较性能,使用多个循环迭代(例如10000)以提高准确性。一次调用不是一个好的衡量标准。
-
差别有多大?
标签: java class instanceof