挨踢step by step

宁可挨踢,不可露怯。知耻而后勇!

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  0 Posts :: 6 Stories :: 0 Comments :: 0 Trackbacks
很多人都觉得对于基本类型用 == ,对于引用类型用equals(),为什么呢? 

对于引用类型如果可以用
== 代替equals(),可以大大提高效率。不用说了,我们不关心效率!但是如果能提高
100倍甚至1000倍你也不关心,那就不用往下看了。 

只举两例: 

1 .如何判断一个Class是否指定的类型 

如果你想到instanceof,说明你还是不错的,不过这里不能用instanceof,这里就判断是否String为例吧。
给定一个Class c,判断是否为String类的Class
方法1: 
boolean  b = c.getName().equals(String. class .getName());
方法2:
boolean  b = (c == String. class );

第一种方法太烂了,第二种方法至少快100倍,甚至1000倍或者10000倍,因为用
== 几乎不用时间
我们知道字符串的比较是一个字符一个字符比较。

结论:对于可以使用
== 的比较,不要使用equals();一般单例类的实例可以使用 == ,比如枚举类。 

2 .对于字符串用 == 代替equals() ?  
既然
== 效率这么高,而且String是一个不可变的,可不可以用 == 代替equals呢?
String s1
= " hello " ;
String s2
= " hello " ;
boolean  eq = (s1 == s2);
这里当然可以用
== 代替,因为他们是同一个对象,但是如果用了new的话就不行了.
对于字符串从不用new生成是不是就可以用
== 代替equals呢 ?
还是不行,这里举一个例子吧:
String s1
= " hello " ;
StringBuffer sb
= new  StringBuffer(s1);
String s2
= sb.toString();
boolean  b = (s1 == s2); // false
结论:特定场合可以使用 == 代替,因为大部分情况下不能用 == ,所以除非性能太重要了,否则不用
== 代替equals,因为你这样写别人可能就看不懂了。

3 .真的那么好用吗 ?
看到
== 的效率这么高,就一直想用,我就变通一下:
boolean  eq(String s1,String s2) {
     s1
= s1.intern();
    s2
= s2.intern();
    
return  s1 == s2; 
}
 
能想到这样使用真的不简单,但是这样不但没有提高效率,反而大大降低了效率.
因为intern本身就比equals来的慢,你这里还两次!
不过这种用法我在Class类的代码里看到过。
posted on 2006-11-09 13:57 AaronJin 阅读(387) 评论(0)  编辑  收藏 所属分类: Java转贴