仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1353|回复: 19
打印 上一主题 下一主题

[学习教程] JAVA网页设计Java的字符串拼接与功能仓酷云

[复制链接]
飘飘悠悠 该用户已被删除
跳转到指定楼层
#
发表于 2015-1-18 11:32:07 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
多谢指点,其实我对.net网页编程和ruby也不是很了解,对与java也只是刚起步的阶段,只是在学习中有了点想法就写出来了,现在俺本科还没毕业,所以对大型项目基本上也没有什么经验。概述:本文次要研讨的是JAVA的字符串拼接的功能,原文中的测试代码在功效上其实不等价,招致concat的测试意义不年夜。不外原作者在批评栏给了新的concat了局,假如有乐趣的同砚倡议本人修正代码测试。
原文出处:http://www.venishjoe.net/2009/11/java-string-concatenation-and.html
本文来自:http://coolshell.cn/?p=2235
在JAVA中拼接两个字符串的最烦琐的体例就是利用操纵符”+”了。假如你用”+”来毗连流动长度的字符串,大概功能上会稍受影响,可是假如你是在轮回中来”+”多个串的话,功能将指数倍的下落。假定有一个字符串,我们将对这个字符串做大批轮回拼接操纵,利用”+”的话将失掉最低的功能。可是事实这本性能有多差?假如我们同时也把StringBuffer,StringBuilder或String.concat()放进功能测试中,了局又会怎样呢?本文将会就这些成绩给出一个谜底!

我们将利用Per4j来盘算功能,由于这个工具能够给我们一个完全的功能目标汇合,好比最小,最年夜耗时,统计工夫段的尺度偏向等。在测试代码中,为了失掉一个正确的尺度偏向值,我们将实行20个拼接”*”50,000次的测试。上面是我们将利用到的拼接字符串的办法:


  • ConcatenationOperator(+)
  • Stringconcatmethod–concat(Stringstr)
  • StringBufferappendmethod–append(Stringstr)
  • StringBuilderappendmethod–append(Stringstr)
最初,我们将看看字节码,来研讨这些办法究竟是怎样实行的。如今,让我们先入手下手来创立我扪的类。注重为了盘算每一个轮回的功能,代码中的每段测试代码都必要用Per4J库举行封装。起首我们先界说迭代次数
  1. privatestaticfinalintOUTER_ITERATION=20;privatestaticfinalintINNER_ITERATION=50000;
复制代码
接上去,我们将利用上述4个办法来完成我们的测试代码。
  1. StringaddTestStr="";StringconcatTestStr="";StringBufferconcatTestSb=null;StringBuilderconcatTestSbu=null;for(intouterIndex=0;outerIndex<=OUTER_ITERATION;outerIndex++){StopWatchstopWatch=newLoggingStopWatch("StringAddConcat");addTestStr="";for(intinnerIndex=0;innerIndex<=INNER_ITERATION;innerIndex++)addTestStr+="*";stopWatch.stop();}for(intouterIndex=0;outerIndex<=OUTER_ITERATION;outerIndex++){StopWatchstopWatch=newLoggingStopWatch("StringConcat");concatTestStr="";for(intinnerIndex=0;innerIndex<=INNER_ITERATION;innerIndex++)concatTestStr.concat("*");stopWatch.stop();}for(intouterIndex=0;outerIndex<=OUTER_ITERATION;outerIndex++){StopWatchstopWatch=newLoggingStopWatch("StringBufferConcat");concatTestSb=newStringBuffer();for(intinnerIndex=0;innerIndex<=INNER_ITERATION;innerIndex++)concatTestSb.append("*");stopWatch.stop();}for(intouterIndex=0;outerIndex<=OUTER_ITERATION;outerIndex++){StopWatchstopWatch=newLoggingStopWatch("StringBuilderConcat");concatTestSbu=newStringBuilder();for(intinnerIndex=0;innerIndex<=INNER_ITERATION;innerIndex++)concatTestSbu.append("*");stopWatch.stop();}
复制代码
接上去经由过程运转程序来天生功能目标。我的运转情况是64位的Windown7操纵体系,32位的JVM(7-ea)带4GB内存,双核Quad2.00GHz的CPU的呆板.
经由20次迭代后,我们失掉以下的数据:

<br>

了局十分完善如我们设想的那样。独一对照风趣的事变是为何String.concat也很不错,我们都晓得,String是一个常类(初始化后就不会改动的类),那末为何concat的功能会更好一些呢。(译者注:实在原文作者的测试代码有成绩,关于concat()办法的测试代码应当写成concatTestStr=concatTestStr.concat(“*”)才对。)为了回覆这个成绩,我们应当看看concat反编译出来的字节码。在本文的下载包内里包括了一切的字节码,可是如今我们先看一下concat的这个代码片断:
  1. 46:new#6;//classjava/lang/StringBuilder49:dup50:invokespecial#7;//Methodjava/lang/StringBuilder."<init>":()V53:aload_154:invokevirtual#8;//Methodjava/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;57:ldc#9;//String*59:invokevirtual#8;//Methodjava/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;62:invokevirtual#10;//Methodjava/lang/StringBuilder.toString:()Ljava/lang/String;65:astore_166:iinc7,169:goto38
复制代码
这段代码是String.concat()的字节码,从这段代码中,我们能够分明的看到,concat()办法利用了StringBuilder,concat()的功能应当和StringBuilder的一样好,可是因为分外的创立StringBuilder和做.append(str).append(str).toString()的操纵,使得concate的功能会遭到一些影响,以是StringBuilder和StringCancate的工夫是1.8和3.3。
因而,立即在做最复杂的拼接时,假如我们不想创立StringBuffer或StringBuilder实例使,我们也因该利用concat。可是关于大批的字符串拼接操纵,我们就不该该利用concat(译者注:由于测试代码功效上其实不完整等价,改换后的测试代码concat的均匀处置工夫是1650.9毫秒。这个了局在原文的批评内里。),由于concat会下降你程序的功能,损耗你的cpu。因而,在不思索线程平安和同步的情形下,为了取得最高的功能,我们应只管利用StringBuilder
本文的源代码,编译方针文件和字节码能够经由过程上面的这个链接取得:
下载源代码,类和字节码:String_Concatenation_Performance.zip

在性能方面,在windows平台下,.net网页编程可能是占强项,要是把.net网页编程放在sun开发的操作系统上去运行呢?根本就运行不了,.net网页编程对其它操作系统的支持也很弱,性能也可能比不上java。
谁可相欹 该用户已被删除
19#
发表于 2015-4-21 20:12:07 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
柔情似水 该用户已被删除
18#
发表于 2015-4-12 19:05:16 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
爱飞 该用户已被删除
17#
发表于 2015-4-12 17:09:47 | 只看该作者
是一种将安全性(Security)列为第一优先考虑的语言
16#
发表于 2015-4-9 22:00:32 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
老尸 该用户已被删除
15#
发表于 2015-4-8 10:32:30 | 只看该作者
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
精灵巫婆 该用户已被删除
14#
发表于 2015-4-1 16:19:56 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
海妖 该用户已被删除
13#
发表于 2015-3-30 00:38:54 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
小魔女 该用户已被删除
12#
发表于 2015-3-22 17:07:18 | 只看该作者
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
活着的死人 该用户已被删除
11#
发表于 2015-3-15 22:24:04 | 只看该作者
Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
灵魂腐蚀 该用户已被删除
10#
发表于 2015-3-13 02:21:50 | 只看该作者
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
若相依 该用户已被删除
9#
发表于 2015-3-6 15:08:37 | 只看该作者
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
第二个灵魂 该用户已被删除
8#
发表于 2015-3-6 01:11:41 | 只看该作者
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
透明 该用户已被删除
7#
发表于 2015-3-1 01:18:03 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
分手快乐 该用户已被删除
6#
发表于 2015-2-10 07:04:35 | 只看该作者
是一种为 Internet发展的计算机语言
只想知道 该用户已被删除
5#
发表于 2015-2-8 20:11:16 | 只看该作者
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
变相怪杰 该用户已被删除
地板
发表于 2015-2-5 14:30:29 | 只看该作者
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
冷月葬花魂 该用户已被删除
板凳
发表于 2015-1-28 11:14:29 | 只看该作者
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
简单生活 该用户已被删除
沙发
发表于 2015-1-22 19:57:11 | 只看该作者
是一种为 Internet发展的计算机语言
兰色精灵 该用户已被删除
楼主
发表于 2015-1-18 18:13:49 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-16 07:30

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表