﻿<?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-半杯小咖啡</title><link>http://www.blogjava.net/ziwolf/</link><description>想干啥干啥，想写啥写啥</description><language>zh-cn</language><lastBuildDate>Wed, 15 Apr 2026 11:56:32 GMT</lastBuildDate><pubDate>Wed, 15 Apr 2026 11:56:32 GMT</pubDate><ttl>60</ttl><item><title>String s = new String("abc");创建了几个String对象？</title><link>http://www.blogjava.net/ziwolf/archive/2007/01/23/95449.html</link><dc:creator>ziwolf</dc:creator><author>ziwolf</author><pubDate>Tue, 23 Jan 2007 01:16:00 GMT</pubDate><guid>http://www.blogjava.net/ziwolf/archive/2007/01/23/95449.html</guid><wfw:comment>http://www.blogjava.net/ziwolf/comments/95449.html</wfw:comment><comments>http://www.blogjava.net/ziwolf/archive/2007/01/23/95449.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/ziwolf/comments/commentRss/95449.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ziwolf/services/trackbacks/95449.html</trackback:ping><description><![CDATA[
		<div class="tit">String s = new String("abc");创建了几个String对象？</div>
		<div class="date"> </div>
		<table style="TABLE-LAYOUT: fixed">
				<tbody>
						<tr>
								<td>
										<div class="cnt">引用变量与对象的区别；<br />字符串文字"abc"是一个String对象； <br />文字池(pool of literal strings)和堆(heap)中的字符串对象。<br /><br />一、<strong><font color="#ff0000">引用变量与对象</font>：除了一些早期的Java书籍和现在的垃圾书籍，人们都可以从中比较清楚地学习到两者的区别。<br /><font style="BACKGROUND-COLOR: rgb(192,192,192)" face="Times New Roman">A aa;</font><br />这个语句声明一个类A的引用变量aa[我们常常称之为句柄]，而对象一般通过new创建。所以题目中s仅仅是一个引用变量，它不是对象。<br /><br />二、<strong><font color="#ff0000">Java中所有的字符串文字[字符串常量]都是一个String的对象</font>。有人[特别是C程序员]在一些场合喜欢把字符串"当作/看成"字符数组，这也没有办法，因为字符串与字符数组存在一些内在的联系。事实上，它与字符数组是两种完全不同的对象。<br /><br /><font style="BACKGROUND-COLOR: rgb(192,192,192)" face="Times New Roman">System.out.println("Hello".length());<br />char[] cc={'H','i'};<br />System.out.println(cc.length);</font><br /><br />三、<strong><font color="#ff0000">字符串对象的创建</font>:<br />由于字符串对象的大量使用(它是一个对象，一般而言对象总是在heap分配内存)，Java中为了节省内存空间和运行时间(如比较字符串时，==比equals()快)，在编译阶段就把所有的字符串文字放到一个文字池(pool of literal strings)中，而运行时文字池成为常量池的一部分。文字池的好处，就是该池中所有相同的字符串常量被合并，只占用一个空间。<br />我们知道，对两个引用变量，使用==判断它们的值(引用)是否相等，即指向同一个对象：<br /><br /><font style="BACKGROUND-COLOR: rgb(192,192,192)" face="Times New Roman">String s1 = "abc" ;<br />String s2 = "abc" ;<br />if( s1 == s2 ) System.out.println("s1,s2 refer to the same object");<br />else System.out.println("trouble");</font><br /><br /><br />这里的输出显示，两个字符串文字保存为一个对象。就是说，上面的代码只在pool中创建了一个String对象。<br /><br />现在看String s = new String("abc");语句，这里"abc"本身就是pool中的一个对象，而在运行时执行new String()时，<br />将pool中的对象复制一份放到heap中，并且把heap中的这个对象的引用交给s持有。ok，这条语句就创建了2个String对象。<br /><br /><font style="BACKGROUND-COLOR: rgb(192,192,192)" face="Times New Roman"><br />String s1 = new String("abc") ;<br />String s2 = new String("abc") ;<br />if( s1 == s2 ){ //不会执行的语句}</font><br /><br /><br />这时用==判断就可知，虽然两个对象的"内容"相同(equals()判断)，但两个引用变量所持有的引用不同，<br /><br />BTW：上面的代码创建了几个String Object? (三个，pool中一个，heap中2个。)</strong></strong></strong></div>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/ziwolf/aggbug/95449.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ziwolf/" target="_blank">ziwolf</a> 2007-01-23 09:16 <a href="http://www.blogjava.net/ziwolf/archive/2007/01/23/95449.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>地震还把电缆给震了</title><link>http://www.blogjava.net/ziwolf/archive/2006/12/30/91005.html</link><dc:creator>ziwolf</dc:creator><author>ziwolf</author><pubDate>Sat, 30 Dec 2006 06:06:00 GMT</pubDate><guid>http://www.blogjava.net/ziwolf/archive/2006/12/30/91005.html</guid><wfw:comment>http://www.blogjava.net/ziwolf/comments/91005.html</wfw:comment><comments>http://www.blogjava.net/ziwolf/archive/2006/12/30/91005.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ziwolf/comments/commentRss/91005.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ziwolf/services/trackbacks/91005.html</trackback:ping><description><![CDATA[说来真是奇怪，MSN上不了了。竟然是因为地震。我晕。<br />电线为啥放在台湾边上呢。<br /><img src ="http://www.blogjava.net/ziwolf/aggbug/91005.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ziwolf/" target="_blank">ziwolf</a> 2006-12-30 14:06 <a href="http://www.blogjava.net/ziwolf/archive/2006/12/30/91005.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring2 学习笔记</title><link>http://www.blogjava.net/ziwolf/archive/2006/12/26/90089.html</link><dc:creator>ziwolf</dc:creator><author>ziwolf</author><pubDate>Tue, 26 Dec 2006 05:35:00 GMT</pubDate><guid>http://www.blogjava.net/ziwolf/archive/2006/12/26/90089.html</guid><wfw:comment>http://www.blogjava.net/ziwolf/comments/90089.html</wfw:comment><comments>http://www.blogjava.net/ziwolf/archive/2006/12/26/90089.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ziwolf/comments/commentRss/90089.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ziwolf/services/trackbacks/90089.html</trackback:ping><description><![CDATA[初始化web配置<br />如果你使用的是Servlet2.4 及以上的web容器，那么仅需要在web.xml 中增加ContextListener即可<br /><br />&lt;web-app&gt;<br />...<br />&lt;listener&gt;<br />    &lt;listener-class&gt;org.springframework.web.context.request.RequestContextListener&lt;/listener-class&gt;<br />&lt;/listener&gt;<br />...<br />&lt;/web-app&gt;<br /><br /><br />如果你使用的是早期版本web容器 Servlet 2.4 以前，那么需要使用一个javax.servlet.Filter 的实现<br /><br />&lt;web-app&gt;<br />..<br />&lt;filter&gt;<br />    &lt;filter-name&gt;requestContextFilter&lt;/filter-name&gt;<br />    &lt;filter-class&gt;org.springframework.web.filter.RequestContextFilter&lt;/filter-class&gt;<br />&lt;/filter&gt;<br />&lt;filter-mapping&gt;<br />    &lt;filter-name&gt;requestContextFilter&lt;/filter-name&gt;<br />    &lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br />&lt;/filter-mapping&gt;<br />...<br />&lt;/web-app&gt;<br /><br />----------------------------------------------------------------------<br />RequestContextListener and RequestContextFilter 两个类做的都是同样的工作；将HTTP request 对象绑定到为该请求提供服务的Thread。这使具有request or session 作用域的bean能够在后面的调用链中被访问到。<br /><br /><br />作用域bean 与依赖<br />如果打算将一个Http request 范围的bean 注入到别一个bean 中，那么需要注入一个AOP代理来替代被注入的作用域bean，也就是说需要注入一个代理对象。<br />注意<br />&lt;aop:scoped-proxy/&gt;不能和作用域为singleton 或 prototype 的bean一起使用。<br /><br />&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;beans xmlns="http://www.springframework.org/schema/beans"<br />xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />xmlns:aop="http://www.springframework.org/schema/aop"<br />xsi:schemaLocation="<br />http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd<br />http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd"&gt;<br />&lt;!-- a HTTP Session-scoped bean exposed as a proxy --&gt;<br />&lt;bean id="userPreferences" class="com.foo.UserPreferences" scope="session"&gt;<br />&lt;!-- this next element effects the proxying of the surrounding bean --&gt;<br />&lt;aop:scoped-proxy/&gt;<br />&lt;/bean&gt;<br />&lt;!-- a singleton-scoped bean injected with a proxy to the above bean --&gt;<br />&lt;bean id="userService" class="com.foo.SimpleUserService"&gt;<br />&lt;!-- a reference to the proxied 'userPreferences' bean --&gt;<br />&lt;property name="userPreferences" ref="userPreferences"/&gt;<br />&lt;/bean&gt;<br /><br /><br /><br /><br />初始化回调<br /><br />可以在Bean 定义中指定一个普通的初始化方法，即在XML配置文件中通过指定init-method 属性来完成。<br /><br />&lt;bean id="exampleInitBean" class="examples.ExampleBean" init-method="init" /&gt;<br /><br />public class ExampleBean {<br />    public void init(){<br />        //do some initialization work <br />    }<br />}<br /><br /><br />析构回调<br />&lt;bean id="exampleInitBean" class="examples.ExampleBean" destory-method="cleanup"/&gt;<br /><br />public class ExampleBean {<br />    public void cleanup(){<br />        //do some destruction work..<br />    }<br />}<br /><br /><br /><img src ="http://www.blogjava.net/ziwolf/aggbug/90089.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ziwolf/" target="_blank">ziwolf</a> 2006-12-26 13:35 <a href="http://www.blogjava.net/ziwolf/archive/2006/12/26/90089.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>生成MD5，BASE64</title><link>http://www.blogjava.net/ziwolf/archive/2006/12/22/89483.html</link><dc:creator>ziwolf</dc:creator><author>ziwolf</author><pubDate>Fri, 22 Dec 2006 03:50:00 GMT</pubDate><guid>http://www.blogjava.net/ziwolf/archive/2006/12/22/89483.html</guid><description><![CDATA[private byte[] md5(String strSrc){<br />  byte[] returnByte = null;<br />  try{<br />      MessageDigest md5 = MessageDigest.getInstance("MD5");<br />      returnByte = md5.digest(strSrc.getBytes("UTF8"));<br />   }catch(Exception e){<br />      e.printStackTrace();<br />  }<br />  return returnByte;<br /> }<br /> <br /> public String getBase64Encode(byte[] src){<br />    String requestValue="";<br />    try{<br />   BASE64Encoder base64en =  new BASE64Encoder();<br />   requestValue = base64en.encode(src);<br />  }catch(Exception e){<br />   e.printStackTrace();<br />  }<br />    return requestValue;<br /> }<br /><img src ="http://www.blogjava.net/ziwolf/aggbug/89483.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ziwolf/" target="_blank">ziwolf</a> 2006-12-22 11:50 <a href="http://www.blogjava.net/ziwolf/archive/2006/12/22/89483.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>