网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.RMI规范--第五章.
.java中的格式化输出(类似C语言的.
.Java桌面应用程序设计新贵:SWT简.
.Java中classspath的默认值是什么.
.从outlook导入email地址.
.Singleton设计模式简单介绍.
.JAVA技术专题综述之内部类篇.
.JAVA数据对象上机实践.
.用JBuilder2007开发扩展JSF标签的.
.Struts入门--从原理到安装及实例.
.java辨析(1):==和Equal.doc.
.JavaBeans 程序开发从入门到精通.
.Java连接数据库实例.
.实战 J2EE 开发购物网站 开发环境.
.Java中使用正则表达式验证本地化.
.Java入门:状态对象--数据库的替.
.Tomcat性能调整.
.在Java中使用继承.
.Spring JDBC抽象框架简化Web数据.
.SCNA认证全面介绍.

性能优化:==代替equals

发表日期:2008-1-5


很多人一定觉得这个题目老土,稍微有点基础的人都觉得比较弱智,没有什么好讨论的,因为这个问题讨论的太多了。不过你既然进来了,不妨看完,就算给个面子吧,几分钟而已,可能你会有点启发!

很久没有写东西了,现在大部分人也不会关心程序的效率问题了,因为CPU总是闲着,内存总是空着。
很多人都觉得对于基本类型用==,对于引用类型用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类的代码里看到过。

 


上一篇:彻底解决Tomcat的页面提交时的中文问题 人气:661
下一篇:Tomcat和MySQL的一个Server.xml 人气:813
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐