﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-少年阿宾-随笔分类-JavaBasic</title><link>http://blogjava.net/stevenjohn/category/51240.html</link><description>那些青春的岁月</description><language>zh-cn</language><lastBuildDate>Thu, 21 May 2015 19:00:30 GMT</lastBuildDate><pubDate>Thu, 21 May 2015 19:00:30 GMT</pubDate><ttl>60</ttl><item><title>Java  for foreach</title><link>http://www.blogjava.net/stevenjohn/archive/2015/05/21/425223.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Thu, 21 May 2015 15:59:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2015/05/21/425223.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/425223.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2015/05/21/425223.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/425223.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/425223.html</trackback:ping><description><![CDATA[<pre id="best-content-1473998842"  mb-10"="" accuse="aContent" jquery110208908577659991395="83">java 有for(;;)和 for(Object obj : List/Array)<br /><br />最明显的一个：前者是有范围；后者是全部。<br /><p>就编码来说各有好处：for更灵活，foreach更简便<br /></p><pre id="answer-content-1474609222"  mb-10"="" accuse="aContent">for和foreach都是java中重要的集合遍历方法 <br />for循环中 你可以选择从前往后遍历，也可以从后往前遍历，也可以不遍历默写值 <br />但是foreach只能从前往后遍历，而且每一个都会遍历一次，他们之间的选择得看你项目程序中的需求而定</pre><pre id="answer-content-1474661977"  mb-10"="" accuse="aContent">JVM在解释执行行，都会将for与foreach解释成iterator。</pre><pre id="answer-content-1474661977"  mb-10"="" accuse="aContent"><br /><p>总结如下：</p><p>1.如果只是遍历集合或者数组，用foreach好些，快些。</p><p>2.如果对集合中的值进行修改，就要用for循环了。<br />其实foreach的内部原理其实也是Iterator,但它不能像Iterator一样可以人为的控制，而且也不能调用iterator.remove()；<br />更不能使用下标来访问每个元素，所以不能用于增加，删除等复杂的操作。</p></pre><br /><br /></pre><img src ="http://www.blogjava.net/stevenjohn/aggbug/425223.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2015-05-21 23:59 <a href="http://www.blogjava.net/stevenjohn/archive/2015/05/21/425223.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JDK动态代理和CGLib动态代理</title><link>http://www.blogjava.net/stevenjohn/archive/2015/04/22/424585.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Tue, 21 Apr 2015 16:22:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2015/04/22/424585.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/424585.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2015/04/22/424585.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/424585.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/424585.html</trackback:ping><description><![CDATA[<div>静态代理</div><div>静态代理相对来说比较简单，无非就是聚合+多态：</div><div></div><div>参考：设计模式笔记 &#8211; Proxy 代理模式 (Design Pattern)</div><div></div><div>动态代理</div><div>我们知道，通过使用代理，可以在被代理的类的方法的前后添加一些处理方法，这样就达到了类似AOP的效果。而JDK中提供的动态代理，就是实现AOP的绝好底层技术。</div><div></div><div>JDK动态代理</div><div>JDK动态代理主要涉及到java.lang.reflect包中的两个类：Proxy和InvocationHandler。InvocationHandler是一个接口，通过实现该接口定义横切逻辑，并通过反射机制调用目标类的代码，动态将横切逻辑和业务逻辑编制在一起。</div><div></div><div>Proxy利用InvocationHandler动态创建一个符合某一接口的实例，生成目标类的代理对象。</div><div></div><div>例子：Java笔记 &#8211; 反射 动态代理</div><div></div><div>CGLib动态代理</div><div>还有一个叫CGLib的动态代理，CGLib全称为Code Generation Library，是一个强大的高性能，高质量的代码生成类库，可以在运行期扩展Java类与实现Java接口，CGLib封装了asm，可以再运行期动态生成新的class。和JDK动态代理相比较：JDK创建代理有一个限制，就是只能为接口创建代理实例，而对于没有通过接口定义业务方法的类，则可以通过CGLib创建动态代理。</div><div><br /><p>CGLib采用非常底层的字节码技术，可以为一个类创建子类，并在子类中采用方法拦截的技术拦截所有父类方法的调用，并顺势织入横切逻辑。</p> <div id="JDK动态代理和CGLib的比较">JDK动态代理和CGLib的比较</div> <p>CGLib所创建的动态代理对象的性能比JDK所创建的代理对象性能高不少，大概10倍，但CGLib在创建代理对象时所花费的时间却比JDK动态代理多大概8倍，所以对于singleton的代理对象或者具有实例池的代理，因为无需频繁的创建新的实例，所以比较适合CGLib动态代理技术，反之则适用于JDK动态代理技术。另外，由于CGLib采用动态创建子类的方式生成代理对象，所以不能对目标类中的final，private等方法进行处理。所以，大家需要根据实际的情况选择使用什么样的代理了。</p> <p>同样的，Spring的AOP编程中相关的ProxyFactory代理工厂内部就是使用JDK动态代理或CGLib动态代理的，通过动态代理，将增强（advice)应用到目标类中。</p><br /><div>JDK动态代理主要用到java.lang.reflect包中的两个类：Proxy和InvocationHandler.</div> <div>&nbsp;</div> <div>InvocationHandler是一个接口，通过实现该接口定义横切逻辑，并通过反射机制调用目标类的代码，动态的将横切逻辑和业务逻辑编织在一起。</div> <div>&nbsp;</div> <div>Proxy利用InvocationHandler动态创建一个符合某一接口的实例，生成目标类的代理对象。</div><br /></div><img src ="http://www.blogjava.net/stevenjohn/aggbug/424585.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2015-04-22 00:22 <a href="http://www.blogjava.net/stevenjohn/archive/2015/04/22/424585.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java 常量池</title><link>http://www.blogjava.net/stevenjohn/archive/2015/03/31/424000.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Tue, 31 Mar 2015 10:22:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2015/03/31/424000.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/424000.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2015/03/31/424000.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/424000.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/424000.html</trackback:ping><description><![CDATA[<div>&nbsp;If&nbsp;you&nbsp;are&nbsp;not&nbsp;sure&nbsp;about&nbsp;the&nbsp;string&nbsp;pool&nbsp;usage,&nbsp;try&nbsp;-XX:+PrintStringTableStatistics&nbsp;JVM&nbsp;argument.&nbsp;It&nbsp;will&nbsp;print&nbsp;you&nbsp;the&nbsp;string&nbsp;pool&nbsp;usage&nbsp;when&nbsp;your&nbsp;program&nbsp;terminates.</div><img src ="http://www.blogjava.net/stevenjohn/aggbug/424000.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2015-03-31 18:22 <a href="http://www.blogjava.net/stevenjohn/archive/2015/03/31/424000.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java中Static方法和Static程序块的用法总结</title><link>http://www.blogjava.net/stevenjohn/archive/2015/03/25/423823.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Wed, 25 Mar 2015 07:24:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2015/03/25/423823.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/423823.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2015/03/25/423823.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/423823.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/423823.html</trackback:ping><description><![CDATA[<p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.3999996185303px; text-align: justify; background-color: #fafafc;">Static 静态：这里主要记录的是静态程序块和静态方法</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.3999996185303px; text-align: justify; background-color: #fafafc;">如果有些代码必须在项目启动的时候就执行,就需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化但是不执行,在不创建对象的情况下,可以供其他程序调用,而在调用的时候才执行，这需要使用静态方法,这种代码是被动执行的. 静态方法在类加载的时候 就已经加载 可以用类名直接调用。</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.3999996185303px; text-align: justify; background-color: #fafafc;">静态代码块和静态方法的区别是：</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.3999996185303px; text-align: justify; background-color: #fafafc;">静态代码块是自动执行的;</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.3999996185303px; text-align: justify; background-color: #fafafc;">静态方法是被调用的时候才执行的.</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.3999996185303px; text-align: justify; background-color: #fafafc;">静态方法：如果我们在程序编写的时候需要一个不实例化对象就可以调用的方法，我们就可以使用静态方法，具体实现是在方法前面加上static，如下：</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.3999996185303px; text-align: justify; background-color: #fafafc;">public static void method(){}</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.3999996185303px; text-align: justify; background-color: #fafafc;">在使用静态方法的时候需要注意一下几个方面：</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.3999996185303px; text-align: justify; background-color: #fafafc;">在静态方法里只能直接调用同类中其他的静态成员（包括变量和方法），而不能直接访问类中的非静态成员。这是因为，对于非静态的方法和变量，需要先创建类的实例对象后才可使用，而静态方法在使用前不用创建任何对象。（备注：静态变量是属于整个类的变量而不是属于某个对象的）</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.3999996185303px; text-align: justify; background-color: #fafafc;">静态方法不能以任何方式引用this和super关键字，因为静态方法在使用前不用创建任何实例对象，当静态方法调用时，this所引用的对象根本没有产生。</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.3999996185303px; text-align: justify; background-color: #fafafc;">静态程序块：当一个类需要在被载入时就执行一段程序，这样可以使用静态程序块。</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.3999996185303px; text-align: justify; background-color: #fafafc;">public class DemoClass {</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.3999996185303px; text-align: justify; background-color: #fafafc;">private DemoClass(){}</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.3999996185303px; text-align: justify; background-color: #fafafc;">public static DemoClass _instance;</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.3999996185303px; text-align: justify; background-color: #fafafc;">static{</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.3999996185303px; text-align: justify; background-color: #fafafc;">if(null == _instance ){</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.3999996185303px; text-align: justify; background-color: #fafafc;">_instance = new DemoClass();</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.3999996185303px; text-align: justify; background-color: #fafafc;">}</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.3999996185303px; text-align: justify; background-color: #fafafc;">}</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.3999996185303px; text-align: justify; background-color: #fafafc;">public static DemoClass getInstance(){</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.3999996185303px; text-align: justify; background-color: #fafafc;">return _instance;</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.3999996185303px; text-align: justify; background-color: #fafafc;">}</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.3999996185303px; text-align: justify; background-color: #fafafc;">}</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.3999996185303px; text-align: justify; background-color: #fafafc;">这样的程序在类被加载的时候就执行了static中的代码。</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.3999996185303px; text-align: justify; background-color: #fafafc;">Ps:java中类的装载步骤：</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.3999996185303px; text-align: justify; background-color: #fafafc;">在Java中，类装载器把一个类装入Java虚拟机中，要经过三个步骤来完成：装载、链接和初始化，其中链接又可以分成校验、准备和解析三步，除了解析外，其它步骤是严格按照顺序完成的，各个步骤的主要工作如下：</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.3999996185303px; text-align: justify; background-color: #fafafc;">所谓装载就是寻找一个类或是一个接口的二进制形式并用该二进制形式来构造代表这个类或是这个接口的class对象的过程。其中类或接口的名称是给定了的。</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.3999996185303px; text-align: justify; background-color: #fafafc;">装载：查找和导入类或接口的二进制数据；</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.3999996185303px; text-align: justify; background-color: #fafafc;">链接：执行下面的校验、准备和解析步骤，其中解析步骤是可以选择的；</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.3999996185303px; text-align: justify; background-color: #fafafc;">校验：检查导入类或接口的二进制数据的正确性；</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.3999996185303px; text-align: justify; background-color: #fafafc;">准备：给类的静态变量分配并初始化存储空间；</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.3999996185303px; text-align: justify; background-color: #fafafc;">解析：将符号引用转成直接引用；</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.3999996185303px; text-align: justify; background-color: #fafafc;">初始化：激活类的静态变量的初始化Java代码和静态Java代码块</p><img src ="http://www.blogjava.net/stevenjohn/aggbug/423823.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2015-03-25 15:24 <a href="http://www.blogjava.net/stevenjohn/archive/2015/03/25/423823.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA内存占用</title><link>http://www.blogjava.net/stevenjohn/archive/2014/08/01/416458.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Fri, 01 Aug 2014 08:54:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2014/08/01/416458.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/416458.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2014/08/01/416458.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/416458.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/416458.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 最近对程序占用内存方面做了一些优化，取得了不错的效果，总结了一些经验简要说一下，相信会对大家写出优质的程序有所帮助下面的论述针对32位系统，对64位系统不适用，后叙经常你写了一个程序，一测试，功能没问题，一看内存占用也不多，就不去考虑其它的东西了。但可能程序使用了一个什么数据结构，会当数据规模变大时，内存占用激增。基本&amp;&amp;关键的问题是，Java里各种东东占多少内存？？？？？？？？？...&nbsp;&nbsp;<a href='http://www.blogjava.net/stevenjohn/archive/2014/08/01/416458.html'>阅读全文</a><img src ="http://www.blogjava.net/stevenjohn/aggbug/416458.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2014-08-01 16:54 <a href="http://www.blogjava.net/stevenjohn/archive/2014/08/01/416458.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java位运算</title><link>http://www.blogjava.net/stevenjohn/archive/2013/10/18/405417.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Fri, 18 Oct 2013 14:43:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2013/10/18/405417.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/405417.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2013/10/18/405417.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/405417.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/405417.html</trackback:ping><description><![CDATA[<div><h1><a id="cb_post_title_url" href="http://www.cnblogs.com/highriver/archive/2011/08/15/2139600.html" style="margin: 0px; padding: 0px; color: #ff6600; text-decoration: initial;">java位运算<br /><br /><div>http://www.cnblogs.com/highriver/archive/2011/08/15/2139600.html<br />单点登录：<br /><div>http://www.blogjava.net/rabbit/archive/2013/10/18/405392.html</div><br /></div></a></h1></div><img src ="http://www.blogjava.net/stevenjohn/aggbug/405417.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2013-10-18 22:43 <a href="http://www.blogjava.net/stevenjohn/archive/2013/10/18/405417.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java 占用字节数</title><link>http://www.blogjava.net/stevenjohn/archive/2013/10/18/405416.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Fri, 18 Oct 2013 14:31:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2013/10/18/405416.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/405416.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2013/10/18/405416.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/405416.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/405416.html</trackback:ping><description><![CDATA[<span class="Apple-style-span" style="color: #333333; font-family: arial, 宋体, sans-serif, 'Microsoft YaHei', tahoma; line-height: 24px; background-color: #f1fedd; "><pre id="best-content-843701432" accuse="aContent" class="best-text mb-10" style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: arial, 'courier new', courier, 宋体, monospace; white-space: pre-wrap; word-wrap: break-word; "><a class="inner-link decor-none" href="http://zhidao.baidu.com/search?word=%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B&amp;fr=qb_search_exp&amp;ie=utf8" target="_blank" rel="nofollow" data-word="0" style="color: #2d64b3; text-decoration: none; "><span style="color: #333333; font-family: arial, 宋体, sans-serif, 'Microsoft YaHei', tahoma; font-size: 14px; line-height: 24px; background-color: #f1fedd; "></span></a><pre id="best-content-843701432" accuse="aContent"  mb-10"="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: arial, 'courier new', courier, 宋体, monospace; white-space: pre-wrap; word-wrap: break-word; "><a class="inner-link decor-none" href="http://zhidao.baidu.com/search?word=%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B&amp;fr=qb_search_exp&amp;ie=utf8" target="_blank" rel="nofollow" data-word="0" style="color: #2d64b3; text-decoration: none; "></a><a decor-none"="" href="http://zhidao.baidu.com/search?word=%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B&amp;fr=qb_search_exp&amp;ie=utf8" target="_blank" rel="nofollow" data-word="0" style="color: #2d64b3; text-decoration: none; ">数据类型</a>                   大小(二进制位数)                 范围                                                                                 默认值 <br /><br />byte(字节) 	         8                     -128 - 127                                                                                             0<br />shot(短整型)            16                   -32768 - 32768                                                                                      0<br />int(整型)                  32                    -2147483648-2147483648                                                                    0<br />long(长整型)            64                   -9233372036854477808-9233372036854477808                                0        <br />float(<a decor-none"="" href="http://zhidao.baidu.com/search?word=%E6%B5%AE%E7%82%B9%E5%9E%8B&amp;fr=qb_search_exp&amp;ie=utf8" target="_blank" rel="nofollow" data-word="1" style="color: #2d64b3; text-decoration: none; ">浮点型</a>)            32                   -3.40292347E+38-3.40292347E+38                                                     0.0f<br />double(双精度)	        64                 -1.79769313486231570E+308-1.79769313486231570E+308              0.0d<br />char(字符型)           16                  &#8216; \u0000 - u\ffff &#8217;                                                                                      &#8216;\u0000 &#8217;<br /></pre></pre></span><span class="Apple-style-span" style="color: #333333; font-family: arial, 'courier new', courier, 宋体, monospace; line-height: 24px; white-space: pre-wrap; background-color: #f1fedd; "><a class="inner-link decor-none" href="http://zhidao.baidu.com/search?word=%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B&amp;fr=qb_search_exp&amp;ie=utf8" target="_blank" rel="nofollow" data-word="0" style="color: #2d64b3; text-decoration: none; "><span style="color: #333333; font-family: arial, 宋体, sans-serif, 'Microsoft YaHei', tahoma; font-size: 14px; line-height: 24px; background-color: #f1fedd; "></span></a><pre id="best-content-843701432" accuse="aContent"  mb-10"="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: arial, 'courier new', courier, 宋体, monospace; white-space: pre-wrap; word-wrap: break-word; display: inline !important; "><a class="inner-link decor-none" href="http://zhidao.baidu.com/search?word=%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B&amp;fr=qb_search_exp&amp;ie=utf8" target="_blank" rel="nofollow" data-word="0" style="color: #2d64b3; text-decoration: none; ">boolean(</a><a decor-none"="" href="http://zhidao.baidu.com/search?word=%E5%B8%83%E5%B0%94%E5%9E%8B&amp;fr=qb_search_exp&amp;ie=utf8" target="_blank" rel="nofollow" data-word="2" style="color: #2d64b3; text-decoration: none; ">布尔型</a>)      1                   true/false                                                                                                 false</pre></span><span class="Apple-style-span" style="color: #333333; font-family: arial, 宋体, sans-serif, 'Microsoft YaHei', tahoma; line-height: 24px; background-color: #f1fedd; "><pre accuse="aContent" class="best-text mb-10" style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: arial, 'courier new', courier, 宋体, monospace; white-space: pre-wrap; word-wrap: break-word; "><br /><br /></pre></span><span class="Apple-style-span" style="color: #333333; font-family: arial, 宋体, sans-serif, 'Microsoft YaHei', tahoma; line-height: 24px; background-color: #ffffff; "><h1 class="mb-5" accuse="qTitle" style="margin-top: 0px; margin-right: 0px; margin-bottom: 5px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 16px; font: normal normal bold 16px/26px 'Microsoft YaHei', SimHei, arial; word-break: break-all; "><span class="ask-title" style="display: inline-block; width: 595px; overflow-x: hidden; overflow-y: hidden; ">JAVA基本数据类型所占字节数是多少？</span></h1></span><span class="Apple-style-span" style="color: #494949; font-family: simsun; background-color: #e2e2e2; "><div>byte &nbsp;<wbr>&nbsp;&nbsp;<wbr>&nbsp;1字节 &nbsp;<wbr>&nbsp;&nbsp;<wbr>&nbsp;&nbsp;<wbr>&nbsp;&nbsp;<wbr>&nbsp;&nbsp;<wbr>&nbsp;&nbsp;<wbr>&nbsp;&nbsp;<wbr>&nbsp;<wbr></div><div>short &nbsp;<wbr>&nbsp;&nbsp;<wbr>2字节 &nbsp;<wbr>&nbsp;&nbsp;<wbr>&nbsp;&nbsp;<wbr>&nbsp;&nbsp;<wbr>&nbsp;&nbsp;<wbr>&nbsp;&nbsp;<wbr>&nbsp;&nbsp;<wbr>&nbsp;<wbr></div><div>int &nbsp;<wbr>&nbsp;&nbsp;<wbr>&nbsp;&nbsp;<wbr>4字节 &nbsp;<wbr>&nbsp;&nbsp;<wbr>&nbsp;&nbsp;<wbr>&nbsp;&nbsp;<wbr>&nbsp;&nbsp;<wbr>&nbsp;&nbsp;<wbr>&nbsp;&nbsp;<wbr>&nbsp;<wbr></div><div>long &nbsp;<wbr>&nbsp;&nbsp;<wbr>&nbsp;8字节 &nbsp;<wbr>&nbsp;&nbsp;<wbr>&nbsp;&nbsp;<wbr>&nbsp;&nbsp;<wbr>&nbsp;&nbsp;<wbr>&nbsp;&nbsp;<wbr>&nbsp;&nbsp;<wbr>&nbsp;<wbr></div><div>char &nbsp;<wbr>&nbsp;&nbsp;<wbr>&nbsp;2字节（C语言中是1字节）可以存储一个汉字</div><div>float &nbsp;<wbr>&nbsp;&nbsp;<wbr>4字节 &nbsp;<wbr>&nbsp;&nbsp;<wbr>&nbsp;&nbsp;<wbr>&nbsp;&nbsp;<wbr>&nbsp;&nbsp;<wbr>&nbsp;&nbsp;<wbr>&nbsp;&nbsp;<wbr>&nbsp;<wbr></div><div>double &nbsp;<wbr>&nbsp;8字节 &nbsp;<wbr>&nbsp;&nbsp;<wbr>&nbsp;&nbsp;<wbr>&nbsp;&nbsp;<wbr>&nbsp;&nbsp;<wbr>&nbsp;&nbsp;<wbr>&nbsp;&nbsp;<wbr>&nbsp;<wbr></div><div>boolean &nbsp;<wbr>false/true(理论上占用1bit,1/8字节，实际处理按1byte处理)&nbsp;&nbsp;<wbr>&nbsp;&nbsp;<wbr>&nbsp;&nbsp;<wbr>&nbsp;</div></span><span class="Apple-style-span" style="color: #333333; font-family: arial, 宋体, sans-serif, 'Microsoft YaHei', tahoma; line-height: 24px; background-color: #f1fedd; "><pre accuse="aContent" class="best-text mb-10" style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: arial, 'courier new', courier, 宋体, monospace; white-space: pre-wrap; word-wrap: break-word; "><div><pre id="best-content-875525478" accuse="aContent"  mb-10"="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: arial, 'courier new', courier, 宋体, monospace; white-space: pre-wrap; word-wrap: break-word; color: #333333; font-size: 14px; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: 24px; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: #f1fedd; ">JAVA是采用Unicode编码。每一个字节占8位。你电脑系统应该是 32位系统，这样每个int就是 4个字节<br /></pre></div></pre></span><span class="Apple-style-span" style="color: #333333; font-family: arial, 宋体, sans-serif, 'Microsoft YaHei', tahoma; line-height: 24px; background-color: #ffffff; "><pre id="answer-content-252602844" accuse="aContent" class="answer-text mb-10" style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: arial, 'courier new', courier, 宋体, monospace; white-space: pre-wrap; word-wrap: break-word; ">其中一个字节由8个二进制位组成<br /><br /></pre></span><span class="Apple-style-span" style="color: #333333; font-family: arial, 宋体, sans-serif, 'Microsoft YaHei', tahoma; line-height: 24px; background-color: #ffffff; "><pre id="answer-content-487363632" accuse="aContent" class="answer-text mb-10" style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: arial, 'courier new', courier, 宋体, monospace; white-space: pre-wrap; word-wrap: break-word; ">Java一共有8种基本<a class="inner-link decor-none" href="http://zhidao.baidu.com/search?word=%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B&amp;fr=qb_search_exp&amp;ie=utf8" target="_blank" rel="nofollow" data-word="0" style="color: #2d64b3; text-decoration: none; ">数据类型</a>（原始<a class="inner-link decor-none" href="http://zhidao.baidu.com/search?word=%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B&amp;fr=qb_search_exp&amp;ie=utf8" target="_blank" rel="nofollow" data-word="0" style="color: #2d64b3; text-decoration: none; ">数据类型</a>）：     <br />类型  存储要求 范围（包含） 默认值 包装类<br />整 int 4字节（32位） -231~ 231-1 0 Integer<br />数 short 2字节（16位） -215~215-1 0 Short<br />类 long 8字节（64位） -263~263-1 0 Long<br />型 byte 1字节（8位） -27~27-1 0 Byte<br />浮点 float 4字节（32位） -3.4e+38 ~ 3.4e+38 0.0f Float<br />类型 double 8字节（64位） -1.7e+308 ~ 1.7e+308 0 Double<br />字符 char 2字节（16位） u0000~uFFFF（&#8216;&#8217;~&#8216;？&#8217;） &#8216;0&#8217; Character<br />   （0~216-1（65535））  <br />布尔 boolean 1/8字节（1位） true, false FALSE Boolean</pre></span><span class="Apple-style-span" style="color: #333333; font-family: arial, 宋体, sans-serif, 'Microsoft YaHei', tahoma; line-height: 24px; background-color: #ffffff; "><pre accuse="aContent" class="answer-text mb-10" style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: arial, 'courier new', courier, 宋体, monospace; white-space: pre-wrap; word-wrap: break-word; "><br /><br /><br /></pre></span><span class="Apple-style-span" style="color: #362e2b; font-family: Arial; line-height: 26px; background-color: #ffffff; "><span style="color: #333333; font-family: Arial; line-height: 26px; font-size: 18px; ">在移动开发中由于移动设备内存的局限性，往往需要考虑使用的数据类型所占用的字节数。下面简单介绍下Java中几种基本数据类型，以加深记忆。<br /><span style="color: #ff0000; ">在Java中一共有8种基本数据类型，其中有4种整型，2种浮点类型，1种用于表示Unicode编码的字符单元的字符类型和1种用于表示真值的boolean类型。（一个字节等于8个bit）</span><br /><br /><span style="color: #3333ff; ">1.整型</span><br />类型&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 存储需求 &nbsp; &nbsp; bit数 &nbsp; &nbsp;取值范围&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 备注<br />int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4字节 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 4*8&nbsp;<br />short&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2字节 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2*8 &nbsp; &nbsp;－32768～32767<br />long&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8字节 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 8*8<br />byte&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1字节 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1*8 &nbsp; &nbsp; －128～127<br /><br /><span style="color: #3333ff; ">2.浮点型</span><br />类型&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 存储需求 &nbsp; &nbsp; bit数 &nbsp; &nbsp;取值范围&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 备注<br />float&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4字节 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 4*8 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;float类型的数值有一个后缀F(例如：3.14F)<br />double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8字节 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 8*8 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 没有后缀F的浮点数值(如3.14)默认为double类型<br /><br /><span style="color: #3333ff; ">3.char类型</span><br />类型&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 存储需求 &nbsp; &nbsp; bit数 &nbsp; &nbsp; 取值范围&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 备注<br />char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2字节 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2*8<br /><br /><span style="color: #3333ff; ">4.boolean类型</span><br />类型&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 存储需求 &nbsp; &nbsp;bit数 &nbsp; &nbsp;取值范围&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 备注<br />boolean&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1字节 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1*8 &nbsp; &nbsp; &nbsp;false、true<br /></span><span style="color: #333333; font-family: Arial; font-size: 14px; line-height: 26px; "></span><p style="color: #333333; font-family: Arial; font-size: 14px; line-height: 26px; "><span style="font-size: 18px; "><br /></span></p><p style="color: #333333; font-family: Arial; font-size: 14px; line-height: 26px; "><span style="font-size: 18px; "><span style="color: #ff0000; ">补充：</span>Java有一个能够表示任意精度的算书包，通常称为&#8220;大数值&#8221;(big number)。虽然被称为大数值，但它并不是一种Java类型，而是一个Java对象。</span></p><p style="color: #333333; font-family: Arial; font-size: 14px; line-height: 26px; "><span style="font-size: 18px; ">如果基本的整数和浮点数精度不能够满足需求，那么可以使用java.math包中的两个很有用的类：<span style="color: #ff0000; ">BigIntegerBigDecimal(Android SDK中也包含了java.math包以及这两个类)</span>这两个类可以处理包含任意长度数字序列的数值。BigInteger类实现了任意精度的整数运算，BigDecimal实现了任意精度的浮点数运算。具体的用法可以参见Java API。</span></p><div><span style="font-size: 18px; "><div>http://blog.csdn.net/witsmakemen/article/details/8974200<br /></div></span></div></span><span class="Apple-style-span" style="color: #333333; font-family: arial, 宋体, sans-serif, 'Microsoft YaHei', tahoma; line-height: 24px; background-color: #ffffff; "><pre accuse="aContent" class="answer-text mb-10" style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: arial, 'courier new', courier, 宋体, monospace; white-space: pre-wrap; word-wrap: break-word; "><br /></pre></span><span class="Apple-style-span" style="color: #333333; font-family: arial, 宋体, sans-serif, 'Microsoft YaHei', tahoma; line-height: 24px; background-color: #f1fedd; "><pre id="best-content-428742571" accuse="aContent" class="best-text mb-10" style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: arial, 'courier new', courier, 宋体, monospace; white-space: pre-wrap; word-wrap: break-word; ">int常见为4个字节，跟操作系统有关系。<br />turbo c（以及Turbo c的一些衍生编译器，他们用的一套<a class="inner-link decor-none" href="http://zhidao.baidu.com/search?word=%E7%BC%96%E8%AF%91%E7%A8%8B%E5%BA%8F&amp;fr=qb_search_exp&amp;ie=utf8" target="_blank" rel="nofollow" data-word="0" style="color: #2d64b3; text-decoration: none; ">编译程序</a>）是dos时代的编译器，是上世纪80年代的产物，严重过时，属于老掉牙的产品，他们编译出来的程序是16位操作系统dos下的程序，所以长度为16位，即两个字节。windows为了兼容dos，所以turbo c生成的文件也可以在windows中运行。<br />其他一般就都是4个字节了。</pre></span><span class="Apple-style-span" style="color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #f5f5f5; ">操作系统16位的时候，int&nbsp;2字节，操作系统32位的时候，int&nbsp;4字节，由于32位系统之前占主流地位，实际现在就算是64位系统，出于兼容性考虑，int也是4字节的</span><span class="Apple-style-span" style="color: #333333; font-family: arial, 宋体, sans-serif, 'Microsoft YaHei', tahoma; line-height: 24px; background-color: #f1fedd; "><pre accuse="aContent" class="best-text mb-10" style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: arial, 'courier new', courier, 宋体, monospace; white-space: pre-wrap; word-wrap: break-word; "><div><pre accuse="aContent"  mb-10"="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: arial, 'courier new', courier, 宋体, monospace; white-space: pre-wrap; word-wrap: break-word; color: #333333; font-size: 14px; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: 24px; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: #f1fedd; "><br /></pre></div><br /><br /></pre></span><img src ="http://www.blogjava.net/stevenjohn/aggbug/405416.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2013-10-18 22:31 <a href="http://www.blogjava.net/stevenjohn/archive/2013/10/18/405416.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA编程中URL传值符号的转换</title><link>http://www.blogjava.net/stevenjohn/archive/2013/08/22/403200.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Thu, 22 Aug 2013 12:23:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2013/08/22/403200.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/403200.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2013/08/22/403200.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/403200.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/403200.html</trackback:ping><description><![CDATA[<p style="padding-bottom: 0px; widows: 2; text-transform: none; text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 14px/25px 微软雅黑; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(22,24,35); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">有些符号在URL中是不能直接传递的，如果要在URL中传递这些特殊符号，那么就要使用他们的编码了。下表中列出了一些URL特殊符号及编码</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 14px/25px 微软雅黑; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(22,24,35); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">十六进制值</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 14px/25px 微软雅黑; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(22,24,35); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">&nbsp;</p>
<table style="padding-bottom: 0px; widows: 2; text-transform: none; text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 14px/25px 微软雅黑; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(22,24,35); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" border="1" cellspacing="0" cellpadding="0">
<tbody style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">
<tr style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">
<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" width="30">1</td>
<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">+</td>
<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">URL 中+号表示空格</td>
<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">%2B</td></tr>
<tr style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">
<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">2</td>
<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">空格</td>
<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">URL中的空格可以用+号或者编码</td>
<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">%20</td></tr>
<tr style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">
<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">3</td>
<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">/</td>
<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">分隔目录和子目录</td>
<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">%2F</td></tr>
<tr style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">
<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">4</td>
<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">?</td>
<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">分隔实际的 URL 和参数</td>
<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">%3F</td></tr>
<tr style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">
<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">5</td>
<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">%</td>
<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">指定特殊字符</td>
<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">%25</td></tr>
<tr style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">
<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">6</td>
<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">#</td>
<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">表示书签</td>
<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">%23</td></tr>
<tr style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">
<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">7</td>
<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&amp;</td>
<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">URL 中指定的参数间的分隔符</td>
<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">%26</td></tr>
<tr style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">
<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">8</td>
<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">=</td>
<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">URL 中指定参数的值</td>
<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">%3D</td></tr></tbody></table>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 14px/25px 微软雅黑; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(22,24,35); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"></p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 14px/25px 微软雅黑; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(22,24,35); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">&nbsp;<br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />　　解决的方法：</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 14px/25px 微软雅黑; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(22,24,35); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">　　replace() 方法如果直接用str.replace("-","!") 只会替换第一个匹配的字符.</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 14px/25px 微软雅黑; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(22,24,35); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">　　而str.replace(/\-/g,"!")则可以替换掉全部匹配的字符(g为全局标志)。</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 14px/25px 微软雅黑; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(22,24,35); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">　　replace()</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 14px/25px 微软雅黑; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(22,24,35); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">　　js中替换字符变量如下：</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 14px/25px 微软雅黑; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(22,24,35); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">　　data2=data2.replace(/\%/g,"%25");</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 14px/25px 微软雅黑; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(22,24,35); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">　　data2=data2.replace(/\#/g,"%23");</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 14px/25px 微软雅黑; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(22,24,35); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">　　data2=data2.replace(/\&amp;/g,"%26");</p><img src ="http://www.blogjava.net/stevenjohn/aggbug/403200.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2013-08-22 20:23 <a href="http://www.blogjava.net/stevenjohn/archive/2013/08/22/403200.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> java中的堆、栈、常量池</title><link>http://www.blogjava.net/stevenjohn/archive/2013/05/23/399677.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Thu, 23 May 2013 14:39:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2013/05/23/399677.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/399677.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2013/05/23/399677.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/399677.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/399677.html</trackback:ping><description><![CDATA[<p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">Java内存分配:</p><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">1. 寄存器：我们在程序中无法控制<br />2. 栈：存放基本类型的数据和对象的引用，但对象本身不存放在栈中，而是存放在堆中<br />3. 堆：存放用new产生的数据<br />4. 静态域：存放在对象中用static定义的静态成员<br />5. 常量池：存放常量<br />6. 非RAM(<span style="font-size: x-small;">随机存取存储器</span>)存储：硬盘等永久存储空间<br />----------------------------------------------------------------------------------------------------------------------</p><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">a.在函数中定义的一些基本类型的变量数据和对象的引用变量都在函数的栈内存中分配。&nbsp;&nbsp;<br />当在一段代码块定义一个变量时，Java就在栈中为这个变量分配内存空间，当该变量退出该作用域后，Java会自动释放掉为该变量所分配的内存空间，该内存空间可以立即被另作他用。&nbsp;&nbsp;<br />b.堆内存用来存放由new创建的对象和数组。&nbsp;在堆中分配的内存，由Java虚拟机的自动垃圾回收器来管理。&nbsp;&nbsp;<br />在堆中产生了一个数组或对象后，还可以在栈中定义一个特殊的变量，让栈中这个变量的取值等于数组或对象在堆内存中的首地址，栈中的这个变量就成了数组或对象的引用变量。&nbsp;&nbsp;引用变量就相当于是为数组或对象起的一个名称，以后就可以在程序中使用栈中的引用变量来访问堆中的数组或对象。引用变量就相当于是为 数组或者对象起的一个名称。引用变量是普通的变量，定义时在栈中分配，引用变量在程序运行到其作用域之外后被释放。而数组和对象本身在堆中分配，即使程序运行到使用 new 产生数组或者对象的语句所在的代码块之外，数组和对象本身占据的内存不会被释放，数组和对象在没有引用变量指向它的时候，才变为垃圾，不能在被使用，但仍然占据内存空间不放，在随后的一个不确定的时间被垃圾回收器收走（释放掉）。这也是&nbsp;<span style="background-color: #ffff00;">Java</span>&nbsp;比较占内存的原因。&nbsp;<br />实际上，栈中的变量指向堆内存中的变量，这就是&nbsp;<span style="background-color: #ffff00;">Java</span>&nbsp;中的指针！&nbsp;<br />c.<span style="color: #ff0000;">常量池</span>(constant pool)指的是在编译期被确定，并被保存在已编译的.class文件中的一些数据。除了包含代码中所定义的各种基本类型（如int、long等等）和对象型（如String及数组）的常量值(final)还包含一些以文本形式出现的符号引用，比如： 类和接口的全限定名； 字段的名称和描述符； 方法和名称和描述符。 虚拟机必须为每个被装载的类型维护一个常量池。常量池就是该类型所用到常量的一个有序集和，包括直接常量（string,integer和floating point常量）和对其他类型，字段和方法的符号引用。对于String常量，它的值是在常量池中的。而JVM中的常量池在内存当中是以表的形式存在的，对于String类型，有一张固定长度的CONSTANT_String_info表用来存储文字字符串值，注意：该表只存储文字字符串值，不存储符号引用。说到这里，对常量池中的字符串值的存储位置应该有一个比较明了的理解了。</p><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">在程序执行的时候,<span style="color: #ff0000;">常量池</span>会储存在Method Area,而不是堆中.<br />d.Java的堆是一个运行时数据区,类的(对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarray等指令建立，它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的，堆的优势是可以动态地分配内存大小，生存期也不必事先告诉编译器，因为它是在运行时动态分配内存的，Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是，由于要在运行时动态分配内存，存取速度较慢。&nbsp;<br /><br />栈的优势是，存取速度比堆要快，仅次于寄存器，栈数据可以共享。但缺点是，存在栈中的数据大小与生存期必须是确定的，缺乏灵活性。栈中主要存放一些基本类型的变量数据（int, short, long, byte, float, double, boolean, char）和对象句柄(引用)。&nbsp;<br /><br />栈有一个很重要的特殊性，就是存在栈中的数据可以共享。假设我们同时定义：&nbsp;<br />int a = 3;&nbsp;<br />int b = 3；&nbsp;<br />编译器先处理int a = 3；首先它会在栈中创建一个变量为a的引用，然后查找栈中是否有3这个值，如果没找到，就将3存放进来，然后将a指向3。接着处理int b = 3；在创建完b的引用变量后，因为在栈中已经有3这个值，便将b直接指向3。这样，就出现了a与b同时均指向3的情况。&nbsp;<br /><br />这时，如果再令a=4；那么编译器会重新搜索栈中是否有4值，如果没有，则将4存放进来，并令a指向4；如果已经有了，则直接将a指向这个地址。因此a值的改变不会影响到b的值。&nbsp;<br /><br />要注意这种数据的共享与两个对象的引用同时指向一个对象的这种共享是不同的，因为这种情况a的修改并不会影响到b, 它是由编译器完成的，它有利于节省空间。而一个对象引用变量修改了这个对象的内部状态，会影响到另一个对象引用变量。</p><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">/*****************************************************************************/</p><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">&nbsp;</p><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">String是一个特殊的包装类数据。可以用：&nbsp;<br />String str = new String("abc");&nbsp;<br />String str = "abc";&nbsp;<br />两种的形式来创建，第一种是用new()来新建对象的，它会在存放于堆中。每调用一次就会创建一个新的对象。&nbsp;<br />而第二种是先在栈中创建一个对String类的对象引用变量str，然后通过符号引用去<span style="color: #ff0000;">字符串常量池</span>里找有没有"abc",如果没有，则将"abc"存放进<span style="color: #ff0000;">字符串常量池</span>，并令str指向&#8221;abc&#8221;，如果已经有&#8221;abc&#8221; 则直接令str指向&#8220;abc&#8221;。&nbsp;<br /><br />比较类里面的数值是否相等时，用equals()方法；当测试两个包装类的引用是否指向同一个对象时，用==，下面用例子说明上面的理论。&nbsp;<br />String str1 = "abc";&nbsp;<br />String str2 = "abc";&nbsp;<br />System.out.println(str1==str2); //true&nbsp;<br />可以看出str1和str2是指向同一个对象的。&nbsp;<br /><br />String str1 =new String ("abc");&nbsp;<br />String str2 =new String ("abc");&nbsp;<br />System.out.println(str1==str2); // false&nbsp;<br />用new的方式是生成不同的对象。每一次生成一个。&nbsp;<br /><br />因此用第二种方式创建多个&#8221;abc&#8221;字符串,在内存中其实只存在一个对象而已. 这种写法有利与节省内存空间. 同时它可以在一定程度上提高程序的运行速度，因为JVM会自动根据栈中数据的实际情况来决定是否有必要创建新对象。而对于String str = new String("abc")；的代码，则一概在堆中创建新对象，而不管其字符串值是否相等，是否有必要创建新对象，从而加重了程序的负担。&nbsp;<br /><br />另一方面, 要注意: 我们在使用诸如String str = "abc"；的格式定义类时，总是想当然地认为，创建了String类的对象str。担心陷阱！对象可能并没有被创建！而可能只是指向一个先前已经创建的对象。只有通过new()方法才能保证每次都创建一个新的对象。&nbsp;<br />由于String类的immutable性质，当String变量需要经常变换其值时，应该考虑使用StringBuffer类，以提高程序效率。&nbsp;<br />1. 首先String不属于8种基本数据类型，String是一个对象。&nbsp;<br />因为对象的默认值是null，所以String的默认值也是null；但它又是一种特殊的对象，有其它对象没有的一些特性。&nbsp;<br /><br />2. new String()和new String(&#8221;")都是申明一个新的空字符串，是空串不是null；&nbsp;<br /><br />3. String str=&#8221;kvill&#8221;；String str=new String (&#8221;kvill&#8221;)的区别<br /><br />看例1：&nbsp;<br /><br />String s0="kvill";&nbsp;<br />String s1="kvill";&nbsp;<br />String s2="kv" + "ill";&nbsp;<br />System.out.println( s0==s1 );&nbsp;<br />System.out.println( s0==s2 );&nbsp;<br />结果为：&nbsp;<br />true&nbsp;<br />true&nbsp;<br /><br />首先，我们要知结果为道<span style="background-color: #ffff00;">Java</span>会确保一个字符串常量只有一个拷贝。&nbsp;<br />因为例子中的s0和s1中的&#8221;kvill&#8221;都是字符串常量，它们在编译期就被确定了，所以s0==s1为true；而&#8221;kv&#8221;和&#8221;ill&#8221;也都是字符串常量，当一个字符串由多个字符串常量连接而成时，它自己肯定也是字符串常量，所以s2也同样在编译期就被解析为一个字符串常量，所以s2也是常量池中&#8221; kvill&#8221;的一个引用。所以我们得出s0==s1==s2；用new String() 创建的字符串不是常量，不能在编译期就确定，所以new String() 创建的字符串不放入常量池中，它们有自己的地址空间。&nbsp;<br /><br />看例2：&nbsp;<br />String s0="kvill";&nbsp;<br />String s1=new String("kvill");&nbsp;<br />String s2="kv" + new String("ill");&nbsp;<br />System.out.println( s0==s1 );&nbsp;<br />System.out.println( s0==s2 );&nbsp;<br />System.out.println( s1==s2 );&nbsp;<br />结果为：&nbsp;<br />false&nbsp;<br />false&nbsp;<br />false&nbsp;<br /><br />例2中s0还是常量池中"kvill&#8221;的应用，s1因为无法在编译期确定，所以是运行时创建的新对象&#8221;kvill&#8221;的引用，s2因为有后半部分 new String(&#8221;ill&#8221;)所以也无法在编译期确定，所以也是一个新创建对象&#8221;kvill&#8221;的应用;明白了这些也就知道为何得出此结果了。&nbsp;<br /><br />4. String.intern()：&nbsp;<br />再补充介绍一点：存在于.class文件中的常量池，在运行期被JVM装载，并且可以扩充。String的intern()方法就是扩充常量池的 一个方法；当一个String实例str调用intern()方法时，<span style="background-color: #ffff00;">Java</span>查找常量池中是否有相同Unicode的字符串常量，如果有，则返回其的引用，如果没有，则在常量池中增加一个Unicode等于str的字符串并返回它的引用；看例3就清楚了&nbsp;<br /><br />例3：&nbsp;<br />String s0= "kvill";&nbsp;<br />String s1=new String("kvill");&nbsp;<br />String s2=new String("kvill");&nbsp;<br />System.out.println( s0==s1 );&nbsp;<br />System.out.println( "**********" );&nbsp;<br />s1.intern();&nbsp;<br />s2=s2.intern(); //把常量池中"kvill"的引用赋给s2&nbsp;<br />System.out.println( s0==s1);&nbsp;<br />System.out.println( s0==s1.intern() );&nbsp;<br />System.out.println( s0==s2 );&nbsp;<br />结果为：&nbsp;<br />false&nbsp;<br />**********&nbsp;<br />false //虽然执行了s1.intern(),但它的返回值没有赋给s1&nbsp;<br />true //说明s1.intern()返回的是常量池中"kvill"的引用&nbsp;<br />true&nbsp;<br /><br />最后我再破除一个错误的理解：有人说，&#8220;使用 String.intern() 方法则可以将一个 String 类的保存到一个全局 String 表中 ，如果具有相同值的 Unicode 字符串已经在这个表中，那么该方法返回表中已有字符串的地址，如果在表中没有相同值的字符串，则将自己的地址注册到表中&#8221;如果我把他说的这个全局的 String 表理解为常量池的话，他的最后一句话，&#8221;如果在表中没有相同值的字符串，则将自己的地址注册到表中&#8221;是错的：&nbsp;<br /><br />看例4：&nbsp;<br />String s1=new String("kvill");&nbsp;<br />String s2=s1.intern();&nbsp;<br />System.out.println( s1==s1.intern() );&nbsp;<br />System.out.println( s1+" "+s2 );&nbsp;<br />System.out.println( s2==s1.intern() );&nbsp;<br />结果：&nbsp;<br />false&nbsp;<br />kvill kvill&nbsp;<br />true&nbsp;<br /><br />在这个类中我们没有声名一个&#8221;kvill&#8221;常量，所以常量池中一开始是没有&#8221;kvill&#8221;的，当我们调用s1.intern()后就在常量池中新添加了一个&#8221;kvill&#8221;常量，原来的不在常量池中的&#8221;kvill&#8221;仍然存在，也就不是&#8220;将自己的地址注册到常量池中&#8221;了。&nbsp;<br />s1==s1.intern()为false说明原来的&#8221;kvill&#8221;仍然存在；s2现在为常量池中&#8221;kvill&#8221;的地址，所以有s2==s1.intern()为true。&nbsp;<br /><br />5. 关于equals()和==:&nbsp;<br />这个对于String简单来说就是比较两字符串的Unicode序列是否相当，如果相等返回true;而==是比较两字符串的地址是否相同，也就是是否是同一个字符串的引用。&nbsp;<br /><br />6. 关于String是不可变的&nbsp;<br />这一说又要说很多，大家只要知道String的实例一旦生成就不会再改变了，比如说：String str=&#8221;kv&#8221;+&#8221;ill&#8221;+&#8221; &#8220;+&#8221;ans&#8221;; 就是有4个字符串常量，首先&#8221;kv&#8221;和&#8221;ill&#8221;生成了&#8221;kvill&#8221;存在内存中，然后&#8221;kvill&#8221;又和&#8221; &#8221; 生成 &#8220;kvill &#8220;存在内存中，最后又和生成了&#8221;kvill ans&#8221;;并把这个字符串的地址赋给了str,就是因为String的&#8221;不可变&#8221;产生了很多临时变量，这也就是为什么建议用StringBuffer的原因了，因为StringBuffer是可改变的。</p><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">/*******************************************************************************/</p><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">下面是一些String相关的常见问题：</p><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">String中的final用法和理解<br />final StringBuffer a = new StringBuffer("111");<br />final StringBuffer b = new StringBuffer("222");<br />a=b;//此句编译不通过</p><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">final StringBuffer a = new StringBuffer("111");<br />a.append("222");//编译通过</p><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">可见，final只对引用的"值"(即内存地址)有效，它迫使引用只能指向初始指向的那个对象，改变它的指向会导致编译期错误。至于它所指向的对象的变化，final是不负责的。</p><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">String 常量池问题的几个例子</p><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">下面是几个常见例子的比较分析和理解：<br />[1]<br />String a = "a1";&nbsp;<br />String b = "a" + 1;&nbsp;<br />System.out.println((a == b)); //result = true<br />String a = "atrue";&nbsp;<br />String b = "a" + "true";&nbsp;<br />System.out.println((a == b)); //result = true<br />String a = "a3.4";&nbsp;<br />String b = "a" + 3.4;&nbsp;<br />System.out.println((a == b)); //result = true</p><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">分析：JVM对于字符串常量的"+"号连接，将程序编译期，JVM就将常量字符串的"+"连接优化为连接后的值，拿"a" + 1来说，经编译器优化后在class中就已经是a1。在编译期其字符串常量的值就确定下来，故上面程序最终的结果都为true。</p><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">[2]<br />String a = "ab";&nbsp;<br />String bb = "b";&nbsp;<br />String b = "a" + bb;&nbsp;<br />System.out.println((a == b)); //result = false</p><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">分析：JVM对于字符串引用，由于在字符串的"+"连接中，有字符串引用存在，而引用的值在程序编译期是无法确定的，即"a" + bb无法被编译器优化，只有在程序运行期来动态分配并将连接后的新地址赋给b。所以上面程序的结果也就为false。</p><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">[3]<br />String a = "ab";&nbsp;<br />final String bb = "b";&nbsp;<br />String b = "a" + bb;&nbsp;<br />System.out.println((a == b)); //result = true</p><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">分析：和[3]中唯一不同的是bb字符串加了final修饰，对于final修饰的变量，它在编译时被解析为常量值的一个本地拷贝存储到自己的常量池中或嵌入到它的字节码流中。所以此时的"a" + bb和"a" + "b"效果是一样的。故上面程序的结果为true。</p><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">[4]<br />String a = "ab";&nbsp;<br />final String bb = getBB();&nbsp;<br />String b = "a" + bb;&nbsp;<br />System.out.println((a == b)); //result = false&nbsp;<br />private static String getBB() {<br />return "b";&nbsp;<br />}</p><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">分析：JVM对于字符串引用bb，它的值在编译期无法确定，只有在程序运行期调用方法后，将方法的返回值和"a"来动态连接并分配地址为b，故上面程序的结果为false。</p><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">通过上面4个例子可以得出得知：<br />String&nbsp; s&nbsp; =&nbsp; "a" + "b" + "c";&nbsp;&nbsp;&nbsp;<br />就等价于String s = "abc";&nbsp;&nbsp;&nbsp;<br /><br />String&nbsp; a&nbsp; =&nbsp; "a";&nbsp;&nbsp;&nbsp;<br />String&nbsp; b&nbsp; =&nbsp; "b";&nbsp;&nbsp;&nbsp;<br />String&nbsp; c&nbsp; =&nbsp; "c";&nbsp;&nbsp;&nbsp;<br />String&nbsp; s&nbsp; =&nbsp;&nbsp; a&nbsp; +&nbsp; b&nbsp; +&nbsp; c;&nbsp;&nbsp;</p><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">这个就不一样了，最终结果等于：&nbsp;&nbsp;&nbsp;<br />StringBuffer temp = new StringBuffer();&nbsp;&nbsp;&nbsp;<br />temp.append(a).append(b).append(c);&nbsp;&nbsp;&nbsp;<br />String s = temp.toString();</p><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">由上面的分析结果，可就不难推断出String 采用连接运算符（+）效率低下原因分析，形如这样的代码：</p><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">public class Test {<br />public static void main(String args[]) {<br />String s = null;<br />for(int i = 0; i &lt; 100; i++) {<br />s += "a";<br />}<br />}<br />}</p><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">每做一次 + 就产生个StringBuilder对象，然后append后就扔掉。下次循环再到达时重新产生个StringBuilder对象，然后 append 字符串，如此循环直至结束。 如果我们直接采用 StringBuilder 对象进行 append 的话，我们可以节省 N - 1 次创建和销毁对象的时间。所以对于在循环中要进行字符串连接的应用，一般都是用StringBuffer或StringBulider对象来进行append操作。</p><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">String对象的intern方法理解和分析：</p><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">public class Test4 {<br />private static String a = "ab";&nbsp;<br />public static void main(String[] args){<br />String s1 = "a";<br />String s2 = "b";<br />String s = s1 + s2;<br />System.out.println(s == a);//false<br />System.out.println(s.intern() == a);//true&nbsp;&nbsp;<br />}<br />}</p><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">这里用到Java里面是一个常量池的问题。对于s1+s2操作，其实是在堆里面重新创建了一个新的对象,s保存的是这个新对象在堆空间的的内容，所以s与a的值是不相等的。而当调用s.intern()方法，却可以返回s在常量池中的地址值，因为a的值存储在常量池中，故s.intern和a的值相等</p><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">&nbsp;</p><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">总结:</p><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">a.栈中用来存放一些原始数据类型的局部变量数据和对象的引用(String,数组.对象等等)但不存放对象内容</p><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">b.堆中存放使用new关键字创建的对象.</p><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">c.字符串是一个特殊包装类,其引用是存放在栈里的,而对象内容必须根据创建方式不同定(常量池和堆).有的是编译期就已经创建好，存放在字符串常量池中，而有的是运行时才被创建.使用new关键字，存放在堆中。</p><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">&nbsp;</p><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">本文转自：<a href="http://zy19880423.javaeye.com/blog/434179" style="color: #ff9900; text-decoration: initial;">http://zy19880423.javaeye.com/blog/434179</a></p><img src ="http://www.blogjava.net/stevenjohn/aggbug/399677.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2013-05-23 22:39 <a href="http://www.blogjava.net/stevenjohn/archive/2013/05/23/399677.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jdk动态代理和java的多态有啥区别？</title><link>http://www.blogjava.net/stevenjohn/archive/2012/12/11/392825.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Tue, 11 Dec 2012 09:46:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2012/12/11/392825.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/392825.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2012/12/11/392825.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/392825.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/392825.html</trackback:ping><description><![CDATA[首先说明一下：这是两个2个东西拉<br /><br />动态代理，不是java语言特性， 只是java提供动态方法拦截的一种方式（工具）<br />有点类似 hook<br />动态代理，只是动态的通过反射，动态执行目标的相关操作，<br />当然要想实现动态代理，必须该类有接口(貌似cglib不需要的)<br />动态代理，是一种实现方式<br /><br /><br />多态，是oo语言的特性<br />
<p>多态表现在重载，一个父类的变量可以引用子类的对象</p>
<p><br />&nbsp;</p><img src ="http://www.blogjava.net/stevenjohn/aggbug/392825.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2012-12-11 17:46 <a href="http://www.blogjava.net/stevenjohn/archive/2012/12/11/392825.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java 抽象类和接口适用场合</title><link>http://www.blogjava.net/stevenjohn/archive/2012/11/22/391773.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Thu, 22 Nov 2012 09:01:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2012/11/22/391773.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/391773.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2012/11/22/391773.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/391773.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/391773.html</trackback:ping><description><![CDATA[<!--StartFragment -->

<div>对于抽象类和接口，我个人觉得，一般性的接口，都可以用这两者，<br />1、接口，接口实现类，<br />2、普通类继承抽象类<br /><br />我想问下，什么场合用接口好点，什么场合用抽象类好点<br />接口类似一个协议，一般只作定义<br />面向对象的语意是完全不同的<br />一种是实现，一种是个别化<br />看uml&nbsp;就知道了<br />这个都用过，接口用的是最多的，但是能不能给讲个语境，比如这里用抽象类就比接口好点<br />目前，有观点就是，使用接口&nbsp;解耦<br />不是这样地，模式里用的接口多，但有些模式，如模版方法模式，用到抽像<br />看具体的使用<br />恩恩，总觉得迷迷糊糊的<br />之前我公司他们写呼叫系统的时候，大量的使用了抽象类<br />抽象类可以定义方法的内容，具体实现留给子类实现<br />抽象的目的是个别化，就是各个子类都有自己的特性<br />虽然都继承父类，但有些方法需要重新，或新增，就是实现了子类的特殊性<br />接口不一样，接口只是单独的&nbsp;realize<br /></div><img src ="http://www.blogjava.net/stevenjohn/aggbug/391773.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2012-11-22 17:01 <a href="http://www.blogjava.net/stevenjohn/archive/2012/11/22/391773.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java ZIP文件压缩</title><link>http://www.blogjava.net/stevenjohn/archive/2012/11/11/391170.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Sun, 11 Nov 2012 15:32:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2012/11/11/391170.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/391170.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2012/11/11/391170.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/391170.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/391170.html</trackback:ping><description><![CDATA[<p>package lc.abin.lee.basic.zip;</p>
<p>import java.io.BufferedOutputStream;<br />import java.io.BufferedReader;<br />import java.io.FileOutputStream;<br />import java.io.FileReader;<br />import java.util.zip.CRC32;<br />import java.util.zip.CheckedOutputStream;<br />import java.util.zip.ZipEntry;<br />import java.util.zip.ZipOutputStream;</p>
<p>public class CreateZip {<br />&nbsp;public static String createZipFile(String filePath){<br />&nbsp;&nbsp;String result="failure";<br />&nbsp;&nbsp;try {<br />&nbsp;&nbsp;&nbsp;FileOutputStream fileOut=new FileOutputStream("example.zip");<br />&nbsp;&nbsp;&nbsp;CheckedOutputStream checkOut=new CheckedOutputStream(fileOut,new CRC32());<br />&nbsp;&nbsp;&nbsp;ZipOutputStream zipOut=new ZipOutputStream(new BufferedOutputStream(checkOut));<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;BufferedReader in=new BufferedReader(new FileReader(filePath));<br />&nbsp;&nbsp;&nbsp;zipOut.putNextEntry(new ZipEntry(filePath));<br />&nbsp;&nbsp;&nbsp;int line;<br />&nbsp;&nbsp;&nbsp;while((line=in.read())!=-1){<br />&nbsp;&nbsp;&nbsp;&nbsp;zipOut.write(line);<br />&nbsp;&nbsp;&nbsp;&nbsp;zipOut.flush();<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;result="success";<br />&nbsp;&nbsp;&nbsp;in.close();<br />&nbsp;&nbsp;&nbsp;zipOut.close();<br />&nbsp;&nbsp;} catch (Exception e) {<br />&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;return result;<br />&nbsp;}<br />&nbsp;public static void main(String[] args) {<br />&nbsp;&nbsp;String fileName="D:\\abin.txt";<br />&nbsp;&nbsp;String result=createZipFile(fileName);<br />&nbsp;&nbsp;System.out.println("result="+result);<br />&nbsp;}<br />}<br /></p><br /><br />貌似还有点问题，明天解决一下<img src ="http://www.blogjava.net/stevenjohn/aggbug/391170.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2012-11-11 23:32 <a href="http://www.blogjava.net/stevenjohn/archive/2012/11/11/391170.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java Cloneable</title><link>http://www.blogjava.net/stevenjohn/archive/2012/10/24/390150.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Wed, 24 Oct 2012 05:27:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2012/10/24/390150.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/390150.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2012/10/24/390150.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/390150.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/390150.html</trackback:ping><description><![CDATA[<p>package net.abin.lee.basic;</p>
<p>public class Can implements Cloneable{<br />&nbsp;private int id;<br />&nbsp;private String address;<br />&nbsp;public Can() {<br />&nbsp;}<br />&nbsp;public Can(int id, String address) {<br />&nbsp;&nbsp;super();<br />&nbsp;&nbsp;this.id = id;<br />&nbsp;&nbsp;this.address = address;<br />&nbsp;}<br />&nbsp;public Object clone()throws CloneNotSupportedException{<br />&nbsp;&nbsp;return super.clone();<br />&nbsp;}<br />&nbsp;public int hashCode(){<br />&nbsp;&nbsp;final int prime=31;<br />&nbsp;&nbsp;int result=1;<br />&nbsp;&nbsp;result=prime*result+id;<br />&nbsp;&nbsp;result=prime*result+((address==null?0:address.hashCode()));<br />&nbsp;&nbsp;return result;<br />&nbsp;}<br />&nbsp;public int getId() {<br />&nbsp;&nbsp;return id;<br />&nbsp;}<br />&nbsp;public void setId(int id) {<br />&nbsp;&nbsp;this.id = id;<br />&nbsp;}<br />&nbsp;public String getAddress() {<br />&nbsp;&nbsp;return address;<br />&nbsp;}<br />&nbsp;public void setAddress(String address) {<br />&nbsp;&nbsp;this.address = address;<br />&nbsp;}<br />&nbsp;<br />}<br /></p><br /><br /><br /><br /><br /><br /><br /><br /><br />
<p>package net.abin.lee.basic;</p>
<p>import junit.framework.TestCase;</p>
<p>public class UserTest extends TestCase{<br />&nbsp;public void test1() throws CloneNotSupportedException{<br />&nbsp;&nbsp;User user1=new User("12","abin",3);<br />&nbsp;&nbsp;User user2=user1;<br />&nbsp;&nbsp;User user3=(User)user1.clone();<br />&nbsp;&nbsp;System.out.println("user1=user2 :"+(user1==user2));<br />&nbsp;&nbsp;System.out.println("user1equalsuser2 :"+(user1.equals(user2)));<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;System.out.println("user1=user3 :"+(user1==user3));<br />&nbsp;&nbsp;System.out.println("user1equalsuser3 :"+(user1.equals(user3)));<br />&nbsp;&nbsp;<br />&nbsp;}<br />&nbsp;@Override<br />&nbsp;protected void runTest() throws Throwable {<br />&nbsp;&nbsp;System.out.println("55");<br />&nbsp;&nbsp;super.runTest();<br />&nbsp;}<br />}<br /></p><img src ="http://www.blogjava.net/stevenjohn/aggbug/390150.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2012-10-24 13:27 <a href="http://www.blogjava.net/stevenjohn/archive/2012/10/24/390150.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java volatile的用法 </title><link>http://www.blogjava.net/stevenjohn/archive/2012/09/01/386728.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Fri, 31 Aug 2012 16:27:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2012/09/01/386728.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/386728.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2012/09/01/386728.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/386728.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/386728.html</trackback:ping><description><![CDATA[package com.abin.lee.collection.singleton;<br />/**<br />&nbsp;* 双重检查加锁 单例模式<br />&nbsp;* @author abin<br />&nbsp;* 这个单例模式写法可以大大减少getInstance的时间消耗！ <br />&nbsp;*/<br />public class SingletonOne {<br />&nbsp; /**&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; * volatile关键词确保：当singleton变量被初始化成SingletonOne实例时，多个线程正确地处理singleton变量&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; */&nbsp; <br />&nbsp;private volatile static SingletonOne singleton=null;<br />&nbsp;public SingletonOne(){}<br />&nbsp;public static SingletonOne getInstance(){<br />&nbsp;&nbsp;if(null==singleton){//检查实例，如果不存在就进入同步区块 <br />&nbsp;&nbsp;&nbsp;synchronized (SingletonOne.class) {//注意，只有第一次才彻底执行这里的代码 <br />&nbsp;&nbsp;&nbsp;&nbsp;if(null!=singleton){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;singleton=new SingletonOne();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;return singleton;<br />&nbsp;}<br />}<br /><br /><br /><br /><br /><br />
<p>package com.abin.lee.collection.singleton;</p>
<p>public class SingletonTwo {<br />&nbsp;/**<br />&nbsp; * volatile关键词确保：当uniqueInstance变量被初始化成Singleton实例时，<br />&nbsp; * 多个线程正确地处理uniqueInstance变量<br />&nbsp; */<br />&nbsp;private volatile static SingletonTwo singleton = new SingletonTwo();</p>
<p>&nbsp;private SingletonTwo() {<br />&nbsp;}</p>
<p>&nbsp;public static SingletonTwo getInstance() {<br />&nbsp;&nbsp;return singleton;<br />&nbsp;}<br />}<br /></p><img src ="http://www.blogjava.net/stevenjohn/aggbug/386728.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2012-09-01 00:27 <a href="http://www.blogjava.net/stevenjohn/archive/2012/09/01/386728.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>继承中静态块、游离块、构造器等的执行顺序 </title><link>http://www.blogjava.net/stevenjohn/archive/2012/08/22/386034.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Wed, 22 Aug 2012 07:07:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2012/08/22/386034.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/386034.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2012/08/22/386034.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/386034.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/386034.html</trackback:ping><description><![CDATA[在继承关系中，静态块、游离块、构造器、静态方法、静态变量、变量等的加载顺序是如何的呢？！让代码来告诉我们，结果如下： 
<p><span style="font-size: medium"><font size="3">&nbsp;&nbsp;</font></span><span style="color: #0000ff; font-size: small"><font size="2">父类静态块<br />&nbsp; 子类静态块<br />&nbsp; 父类变量<br />&nbsp; 父类静态变量<br />&nbsp; 父类游离块<br />&nbsp; 父类构造器<br />&nbsp; 子类变量<br />&nbsp; 子类静态变量<br />&nbsp; 子类游离块<br />&nbsp; 子类的构造器</font></span></p>
<p><span style="font-size: medium"><font size="3">验证的代码：</font></span></p><br />
<div class="quote_div"><span style="font-size: small"><font size="2">package com.jlq.test; <br /><br />public class Test1 { <br /><br />private static String s1 = "父类静态变量"; <br /><br />private String s2 = "父类变量"; <br /><br />public Test1() { <br />System.out.println("父类构造器"); <br />} <br />/** <br />* 静态代码块 <br />*/ <br /><br />static { <br />System.out.println("父类静态块"); <br /><br />} <br />/** <br />* 游离块 <br />*/ <br />{ <br />System.out.println(s2); <br />System.out.println(s1); <br />System.out.println("父类游离块"); <br /><br />} <br /><br />public static void main(String[] args) { <br />new TestChild(); <br />} <br /><br />} <br /><br />class TestChild extends Test1 { <br /><br />private static String s1 = "子类静态变量"; <br /><br />private String s2 = "子类变量"; <br />/** <br />* 静态代码块 <br />*/ <br /><br />static { <br />System.out.println("子类静态块"); <br /><br />} <br />/** <br />* 游离块 <br />*/ <br />{ <br />System.out.println(s2); <br />System.out.println(s1); <br />System.out.println("子类游离块"); <br /><br />} <br /><br />public TestChild() { <br />System.out.println("子类的构造器"); <br />} <br /><br />}</font></span></div><img src ="http://www.blogjava.net/stevenjohn/aggbug/386034.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2012-08-22 15:07 <a href="http://www.blogjava.net/stevenjohn/archive/2012/08/22/386034.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java 重写equals和hashcode</title><link>http://www.blogjava.net/stevenjohn/archive/2012/08/08/385078.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Wed, 08 Aug 2012 08:30:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2012/08/08/385078.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/385078.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2012/08/08/385078.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/385078.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/385078.html</trackback:ping><description><![CDATA[<p>public boolean equals(Object other) {<br />&nbsp;&nbsp;if ((this == other))<br />&nbsp;&nbsp;&nbsp;return true;<br />&nbsp;&nbsp;if ((other == null))<br />&nbsp;&nbsp;&nbsp;return false;<br />&nbsp;&nbsp;if (!(other instanceof BtsfSysAlipayNotifyJournal))<br />&nbsp;&nbsp;&nbsp;return false;<br />&nbsp;&nbsp;BtsfSysAlipayNotifyJournal castOther = (BtsfSysAlipayNotifyJournal) other;</p>
<p>&nbsp;&nbsp;return ((this.getId() == castOther.getId()) || (this.getId() != null<br />&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; castOther.getId() != null &amp;&amp; this.getId().equals(<br />&nbsp;&nbsp;&nbsp;&nbsp;castOther.getId())))<br />&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; ((this.getPartner() == castOther.getPartner()) || (this<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getPartner() != null<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; castOther.getPartner() != null &amp;&amp; this.getPartner()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.equals(castOther.getPartner())))<br />&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; ((this.getDiscount() == castOther.getDiscount()) || (this<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getDiscount() != null<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; castOther.getDiscount() != null &amp;&amp; this<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getDiscount().equals(castOther.getDiscount())))<br />&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; ((this.getPaymentType() == castOther.getPaymentType()) || (this<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getPaymentType() != null<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; castOther.getPaymentType() != null &amp;&amp; this<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getPaymentType().equals(castOther.getPaymentType())))<br />&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; ((this.getSubject() == castOther.getSubject()) || (this<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getSubject() != null<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; castOther.getSubject() != null &amp;&amp; this.getSubject()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.equals(castOther.getSubject())))<br />&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; ((this.getTradeNo() == castOther.getTradeNo()) || (this<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getTradeNo() != null<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; castOther.getTradeNo() != null &amp;&amp; this.getTradeNo()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.equals(castOther.getTradeNo())))<br />&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; ((this.getBuyerEmail() == castOther.getBuyerEmail()) || (this<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getBuyerEmail() != null<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; castOther.getBuyerEmail() != null &amp;&amp; this<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getBuyerEmail().equals(castOther.getBuyerEmail())))<br />&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; ((this.getGmtCreate() == castOther.getGmtCreate()) || (this<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getGmtCreate() != null<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; castOther.getGmtCreate() != null &amp;&amp; this<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getGmtCreate().equals(castOther.getGmtCreate())))<br />&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; ((this.getQuantity() == castOther.getQuantity()) || (this<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getQuantity() != null<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; castOther.getQuantity() != null &amp;&amp; this<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getQuantity().equals(castOther.getQuantity())))<br />&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; ((this.getOutTradeNo() == castOther.getOutTradeNo()) || (this<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getOutTradeNo() != null<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; castOther.getOutTradeNo() != null &amp;&amp; this<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getOutTradeNo().equals(castOther.getOutTradeNo())))<br />&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; ((this.getSellerId() == castOther.getSellerId()) || (this<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getSellerId() != null<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; castOther.getSellerId() != null &amp;&amp; this<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getSellerId().equals(castOther.getSellerId())))<br />&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; ((this.getTradeStatus() == castOther.getTradeStatus()) || (this<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getTradeStatus() != null<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; castOther.getTradeStatus() != null &amp;&amp; this<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getTradeStatus().equals(castOther.getTradeStatus())))<br />&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; ((this.getIsTotalFeeAdjust() == castOther<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getIsTotalFeeAdjust()) || (this.getIsTotalFeeAdjust() != null<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; castOther.getIsTotalFeeAdjust() != null &amp;&amp; this<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getIsTotalFeeAdjust().equals(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;castOther.getIsTotalFeeAdjust())))<br />&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; ((this.getTotalFee() == castOther.getTotalFee()) || (this<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getTotalFee() != null<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; castOther.getTotalFee() != null &amp;&amp; this<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getTotalFee().equals(castOther.getTotalFee())))<br />&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; ((this.getGmtPayment() == castOther.getGmtPayment()) || (this<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getGmtPayment() != null<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; castOther.getGmtPayment() != null &amp;&amp; this<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getGmtPayment().equals(castOther.getGmtPayment())))<br />&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; ((this.getSellerEmail() == castOther.getSellerEmail()) || (this<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getSellerEmail() != null<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; castOther.getSellerEmail() != null &amp;&amp; this<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getSellerEmail().equals(castOther.getSellerEmail())))<br />&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; ((this.getGmtClose() == castOther.getGmtClose()) || (this<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getGmtClose() != null<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; castOther.getGmtClose() != null &amp;&amp; this<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getGmtClose().equals(castOther.getGmtClose())))<br />&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; ((this.getPrice() == castOther.getPrice()) || (this<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getPrice() != null<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; castOther.getPrice() != null &amp;&amp; this.getPrice()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.equals(castOther.getPrice())))<br />&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; ((this.getBuyerId() == castOther.getBuyerId()) || (this<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getBuyerId() != null<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; castOther.getBuyerId() != null &amp;&amp; this.getBuyerId()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.equals(castOther.getBuyerId())))<br />&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; ((this.getUseCoupon() == castOther.getUseCoupon()) || (this<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getUseCoupon() != null<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; castOther.getUseCoupon() != null &amp;&amp; this<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getUseCoupon().equals(castOther.getUseCoupon())))<br />&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; ((this.getCreateTime() == castOther.getCreateTime()) || (this<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getCreateTime() != null<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; castOther.getCreateTime() != null &amp;&amp; this<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getCreateTime().equals(castOther.getCreateTime())))<br />&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; ((this.getLastUpdateTime() == castOther.getLastUpdateTime()) || (this<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getLastUpdateTime() != null<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; castOther.getLastUpdateTime() != null &amp;&amp; this<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getLastUpdateTime().equals(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;castOther.getLastUpdateTime())))<br />&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; ((this.getPaymentMethod() == castOther.getPaymentMethod()) || (this<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getPaymentMethod() != null<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; castOther.getPaymentMethod() != null &amp;&amp; this<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getPaymentMethod()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.equals(castOther.getPaymentMethod())));<br />&nbsp;}</p>
<p>&nbsp;public int hashCode() {<br />&nbsp;&nbsp;int result = 17;</p>
<p>&nbsp;&nbsp;result = 37 * result + (getId() == null ? 0 : this.getId().hashCode());<br />&nbsp;&nbsp;result = 37 * result<br />&nbsp;&nbsp;&nbsp;&nbsp;+ (getPartner() == null ? 0 : this.getPartner().hashCode());<br />&nbsp;&nbsp;result = 37 * result<br />&nbsp;&nbsp;&nbsp;&nbsp;+ (getDiscount() == null ? 0 : this.getDiscount().hashCode());<br />&nbsp;&nbsp;result = 37<br />&nbsp;&nbsp;&nbsp;&nbsp;* result<br />&nbsp;&nbsp;&nbsp;&nbsp;+ (getPaymentType() == null ? 0 : this.getPaymentType()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.hashCode());<br />&nbsp;&nbsp;result = 37 * result<br />&nbsp;&nbsp;&nbsp;&nbsp;+ (getSubject() == null ? 0 : this.getSubject().hashCode());<br />&nbsp;&nbsp;result = 37 * result<br />&nbsp;&nbsp;&nbsp;&nbsp;+ (getTradeNo() == null ? 0 : this.getTradeNo().hashCode());<br />&nbsp;&nbsp;result = 37<br />&nbsp;&nbsp;&nbsp;&nbsp;* result<br />&nbsp;&nbsp;&nbsp;&nbsp;+ (getBuyerEmail() == null ? 0 : this.getBuyerEmail()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.hashCode());<br />&nbsp;&nbsp;result = 37 * result<br />&nbsp;&nbsp;&nbsp;&nbsp;+ (getGmtCreate() == null ? 0 : this.getGmtCreate().hashCode());<br />&nbsp;&nbsp;result = 37 * result<br />&nbsp;&nbsp;&nbsp;&nbsp;+ (getQuantity() == null ? 0 : this.getQuantity().hashCode());<br />&nbsp;&nbsp;result = 37<br />&nbsp;&nbsp;&nbsp;&nbsp;* result<br />&nbsp;&nbsp;&nbsp;&nbsp;+ (getOutTradeNo() == null ? 0 : this.getOutTradeNo()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.hashCode());<br />&nbsp;&nbsp;result = 37 * result<br />&nbsp;&nbsp;&nbsp;&nbsp;+ (getSellerId() == null ? 0 : this.getSellerId().hashCode());<br />&nbsp;&nbsp;result = 37<br />&nbsp;&nbsp;&nbsp;&nbsp;* result<br />&nbsp;&nbsp;&nbsp;&nbsp;+ (getTradeStatus() == null ? 0 : this.getTradeStatus()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.hashCode());<br />&nbsp;&nbsp;result = 37<br />&nbsp;&nbsp;&nbsp;&nbsp;* result<br />&nbsp;&nbsp;&nbsp;&nbsp;+ (getIsTotalFeeAdjust() == null ? 0 : this<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getIsTotalFeeAdjust().hashCode());<br />&nbsp;&nbsp;result = 37 * result<br />&nbsp;&nbsp;&nbsp;&nbsp;+ (getTotalFee() == null ? 0 : this.getTotalFee().hashCode());<br />&nbsp;&nbsp;result = 37<br />&nbsp;&nbsp;&nbsp;&nbsp;* result<br />&nbsp;&nbsp;&nbsp;&nbsp;+ (getGmtPayment() == null ? 0 : this.getGmtPayment()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.hashCode());<br />&nbsp;&nbsp;result = 37<br />&nbsp;&nbsp;&nbsp;&nbsp;* result<br />&nbsp;&nbsp;&nbsp;&nbsp;+ (getSellerEmail() == null ? 0 : this.getSellerEmail()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.hashCode());<br />&nbsp;&nbsp;result = 37 * result<br />&nbsp;&nbsp;&nbsp;&nbsp;+ (getGmtClose() == null ? 0 : this.getGmtClose().hashCode());<br />&nbsp;&nbsp;result = 37 * result<br />&nbsp;&nbsp;&nbsp;&nbsp;+ (getPrice() == null ? 0 : this.getPrice().hashCode());<br />&nbsp;&nbsp;result = 37 * result<br />&nbsp;&nbsp;&nbsp;&nbsp;+ (getBuyerId() == null ? 0 : this.getBuyerId().hashCode());<br />&nbsp;&nbsp;result = 37 * result<br />&nbsp;&nbsp;&nbsp;&nbsp;+ (getUseCoupon() == null ? 0 : this.getUseCoupon().hashCode());<br />&nbsp;&nbsp;result = 37<br />&nbsp;&nbsp;&nbsp;&nbsp;* result<br />&nbsp;&nbsp;&nbsp;&nbsp;+ (getCreateTime() == null ? 0 : this.getCreateTime()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.hashCode());<br />&nbsp;&nbsp;result = 37<br />&nbsp;&nbsp;&nbsp;&nbsp;* result<br />&nbsp;&nbsp;&nbsp;&nbsp;+ (getLastUpdateTime() == null ? 0 : this.getLastUpdateTime()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.hashCode());<br />&nbsp;&nbsp;result = 37<br />&nbsp;&nbsp;&nbsp;&nbsp;* result<br />&nbsp;&nbsp;&nbsp;&nbsp;+ (getPaymentMethod() == null ? 0 : this.getPaymentMethod()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.hashCode());<br />&nbsp;&nbsp;return result;<br />&nbsp;}<br /></p><img src ="http://www.blogjava.net/stevenjohn/aggbug/385078.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2012-08-08 16:30 <a href="http://www.blogjava.net/stevenjohn/archive/2012/08/08/385078.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java 拆分字符串</title><link>http://www.blogjava.net/stevenjohn/archive/2012/03/27/372845.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Tue, 27 Mar 2012 12:04:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2012/03/27/372845.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/372845.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2012/03/27/372845.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/372845.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/372845.html</trackback:ping><description><![CDATA[<p>package com.abin.inter.test;</p>
<p>public class SplitString1 {<br />&nbsp;public static void main(String[] args) {<br />&nbsp;&nbsp;StringBuffer stb = new StringBuffer();<br />&nbsp;&nbsp;String unitId1 = "aaaaa";<br />&nbsp;&nbsp;String callerNumber1 = "bbbbb";<br />&nbsp;&nbsp;String calleeNumber1 = "ccccc";<br />&nbsp;&nbsp;stb.append(unitId1).append("|").append(callerNumber1).append("|")<br />&nbsp;&nbsp;&nbsp;&nbsp;.append(calleeNumber1);<br />&nbsp;&nbsp;System.out.println("stb=" + stb.toString());<br />&nbsp;&nbsp;String unitId = stb.toString()<br />&nbsp;&nbsp;&nbsp;&nbsp;.substring(0, stb.toString().indexOf("|"));<br />&nbsp;&nbsp;System.out.println("unitId=" + unitId);<br />&nbsp;&nbsp;String temp1 = stb.toString().substring(unitId.length() + 1,<br />&nbsp;&nbsp;&nbsp;&nbsp;stb.toString().length() - unitId.length());<br />&nbsp;&nbsp;System.out.println("temp1=" + temp1);<br />&nbsp;&nbsp;String callerNumber = temp1.substring(0, temp1.indexOf("|"));<br />&nbsp;&nbsp;System.out.println("callerNumber=" + callerNumber);<br />&nbsp;&nbsp;System.out.println("unitId.length()=" + unitId.length());<br />&nbsp;&nbsp;System.out.println("callerNumber.length()=" + callerNumber.length());<br />&nbsp;&nbsp;System.out.println("stb=" + stb.toString().length());<br />&nbsp;&nbsp;String temp2 = stb.toString().substring(<br />&nbsp;&nbsp;&nbsp;&nbsp;unitId.length() + callerNumber.length() + 2,<br />&nbsp;&nbsp;&nbsp;&nbsp;stb.toString().length());<br />&nbsp;&nbsp;System.out.println("temp2=" + temp2);<br />&nbsp;&nbsp;String calleeNumber = temp2.substring(0, temp2.length());<br />&nbsp;&nbsp;System.out.println("calleeNumber=" + calleeNumber);<br />&nbsp;}<br />}<br /></p> <img src ="http://www.blogjava.net/stevenjohn/aggbug/372845.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2012-03-27 20:04 <a href="http://www.blogjava.net/stevenjohn/archive/2012/03/27/372845.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>