??xml version="1.0" encoding="utf-8" standalone="yes"?>国产精品久久久久影院亚瑟 ,国产91在线看,99国产精品国产精品毛片http://www.aygfsteel.com/quzhentao/archive/2010/07/22/326886.html高天?/dc:creator>高天?/author>Thu, 22 Jul 2010 15:46:00 GMThttp://www.aygfsteel.com/quzhentao/archive/2010/07/22/326886.htmlhttp://www.aygfsteel.com/quzhentao/comments/326886.htmlhttp://www.aygfsteel.com/quzhentao/archive/2010/07/22/326886.html#Feedback0http://www.aygfsteel.com/quzhentao/comments/commentRss/326886.htmlhttp://www.aygfsteel.com/quzhentao/services/trackbacks/326886.html 一.l我q样的生瓜的一点徏议:
   1.力d好vi~辑器(在linuxpȝ中最常见的是它的一U经q重写的形式QvimQ?br />      管一开始大家很不习惯,也要克服?br />    2.熟练掌握perl和shell语言Q因为在linux世界里,他就是你的利器?br />      当然Python语言也是一个不错的语言Q他可读性好 易于l护 也要学偶?br />    3.书上推荐学习一U叫except~程语言Q从没听q,说是用于驱动 交互式程?/span>执行的前D语a?br /> ?linux于unix的关p?br />    1.linux重写了unixQ也丰富了unixQ它遵@posix标准Q能够在几种gq_上运行,兼容现有的大多数       unix软gQ说到这里大家可能会认ؓlinux是unix的一U变体,但说到底不还是unix吗,我也是这?br />    认ؓ的,书上说他俩是不同的,在我看来不是很让我信服,可能是我不喜Ƣ遵守法律的原因吧?br />   Q原文两个理由如下:Q?br />        ---他同大多数的unix变体不同的是Q他是自qQ开源的Q而且由成百上千的个h和组l无U奉?br />            协同开发出来,linux融入了在原来unix版本中没有的技术改q,所以说它超Z克隆unix的范_
          Q这里我不太明白的是到底unixҎ(gu)没办法实现所为的技术改q,q是说现有的版本q没有推出)
       ---从法律上Ԍ它也是有别于unix的东西,严格来说不能UCؓunix
          Q迷p!Q!Q!Q外国h到底是真的遵守法律还是ؓ了商业)
    2. 完以上linux不是unix的论断后Q他后面有来了一?br />        ---- q值得一提的是linux不是C世界上唯一的自由unix版本
           Q我日,是翻译蓝?nbsp; q是我的理解有问?Q?
    3.在一个知道一个名词BSD
        QUC Berkely Q加州大学的伯克利分校的BSDQBerkely Software Distribution)伯克利Y件发?br />  

    


]]>
oracle charcd的比较时遇到的怪问?/title><link>http://www.aygfsteel.com/quzhentao/archive/2010/07/20/326682.html</link><dc:creator>高天?/dc:creator><author>高天?/author><pubDate>Tue, 20 Jul 2010 15:15:00 GMT</pubDate><guid>http://www.aygfsteel.com/quzhentao/archive/2010/07/20/326682.html</guid><wfw:comment>http://www.aygfsteel.com/quzhentao/comments/326682.html</wfw:comment><comments>http://www.aygfsteel.com/quzhentao/archive/2010/07/20/326682.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/quzhentao/comments/commentRss/326682.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/quzhentao/services/trackbacks/326682.html</trackback:ping><description><![CDATA[今天修改一个前人的E序Q一Dsql文,里面的内容一个很奇怪的地方Q?br /> <div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #0000ff;">SELECT</span><span style="color: #000000;"><br />   <img src="http://www.aygfsteel.com/Images/dot.gif" alt="" />.<br />   <img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" />..<br /> FORM<br />    TABLE1 AQ?br />    TABLE2 B<br /> </span><span style="color: #0000ff;">WHERE</span><span style="color: #000000;"><br />    A.FROMID </span><span style="color: #808080;">=</span><span style="color: #000000;"> B.TOID<br />    </span><span style="color: #808080;">AND</span><span style="color: #000000;"> <img src="http://www.aygfsteel.com/Images/dot.gif" alt="" />..<br />    </span><span style="color: #808080;">AND</span><span style="color: #000000;"> <img src="http://www.aygfsteel.com/Images/dot.gif" alt="" />.</span></div> <br /> <br /> q里面a表中的FromId 是charQ?Q,b表中的toId是charQ?Q?一开始感觉这能出来数据吗 可真他娘的出来了Q晕Q!Q,公司不让上网Q看书找不到介绍Q自己慢慢猜,一定是oracle自动l位数小的补了I格?br /> 回到安上网查了一下,扑ֈ{案了,大概摘录一下,l自׃后提个醒Q如果有什么不对的地方希望那个大家批评指教Q!Q?br /> <br /> Oracle使用以下两种比较规则Q?br /> 1、空D齐比较语?br /> 对于cdCHAR、NCHAR、text literals、USER函数? 在进行比较时, 先在较短的那?br /> 字符串后补上I格以长度相等, 然后再进行比? 注意b.toId = ‘12345678’也会是true?br /> 2、非补齐比较语法<br /> 对于cdVARCHAR2、NVARCHAR2, 则不用补? 直接q行比较.<br /> <br /> <img src ="http://www.aygfsteel.com/quzhentao/aggbug/326682.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/quzhentao/" target="_blank">高天?/a> 2010-07-20 23:15 <a href="http://www.aygfsteel.com/quzhentao/archive/2010/07/20/326682.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>String讨论http://www.aygfsteel.com/quzhentao/archive/2007/02/05/97972.html高天?/dc:creator>高天?/author>Mon, 05 Feb 2007 05:13:00 GMThttp://www.aygfsteel.com/quzhentao/archive/2007/02/05/97972.htmlhttp://www.aygfsteel.com/quzhentao/comments/97972.htmlhttp://www.aygfsteel.com/quzhentao/archive/2007/02/05/97972.html#Feedback1http://www.aygfsteel.com/quzhentao/comments/commentRss/97972.htmlhttp://www.aygfsteel.com/quzhentao/services/trackbacks/97972.html最q见版内对String讨论的帖子很多,但是又众说风云,Z让大家彻底理解Stringq个Ҏ(gu)对象Q我此Z来对String对象做进一步的分析?/p>

友情提示Q希望在阅读之前Q你已经对String对象有了基础的了解。ƈ且已l熟?cd"?引用"?对象"?实例??堆栈"和关于Object对象的equals()Ҏ(gu)的用机Ӟq且已经熟知String对象对equals()Ҏ(gu)重写后的使用机制Q?/p>

首先大家知道QString既可以作Z个对象来使用Q又可以作ؓ一个基本类型来使用。这里指的作Z个基本类型来使用只是指用方法上的,比如String s = "Hello"Q它的用方法如同基本类型int一P比如int i = 1;Q而作Z个对象来使用Q则是指通过new关键字来创徏一个新对象Q比如String s = new String("Hello")。但是它的内部动作其实还是创Z一个对象,q点E后会说到?/p>

其次Q对String对象的比较方法需要了解。Java里对象之间的比较有两U概念,q里拿String对象来说Q一U是?=="来比较,q种比较是针对两个Stringcd的变量的引用Q也是说如果两个Stringcd的变量,它们所引用同一个String对象(x向同一块内存堆)Q则"=="比较的结果是true。另一U是用Object对象的equals()Ҏ(gu)来比较,String对象l承自ObjectQƈ且对equals()Ҏ(gu)q行了重写。两个String对象通过equals()Ҏ(gu)来进行比较时Q其实就是对String对象所装的字W串内容q行比较Q也是说如果两个String对象所装的字W串内容相同(包括大小写相?Q则equals()Ҏ(gu)返回true?/p>

现在开始将对String对象的创建做具体的分析?/p>

首先看以下代码段Q?/p>

String s1 = new String("Hello");
String s2 = new String("Hello");

System.out.println(s1 == s2);
System.out.println(s1.equals(s2));

以上代码D늚打印l果是:

false
true

q个l果怿大家很好理解Q两个Stringcd的变量s1和s2都通过new关键字分别创Z一个新的String对象Q这个new关键字ؓ创徏的每个对象分配一块新的、独立的内存堆。因此当通过"=="来比较它们所引用的是否是同一个对象时Q将q回false。而通过equals()Ҏ(gu)来比较时Q则q回trueQ因两个对象所装的字W串内容是完全相同的?/p>

好,现在把上面的代码D修改如下:

String s1 = new String("Hello");
String s2 = s1;

System.out.println(s1 == s2);
System.out.println(s1.equals(s2));

以上代码D늚打印l果是:

true
true

q个l果应该更好理解Q变量s1q是通过new关键字来创徏了一个新的String对象Q但q里s2q没有通过new关键字来创徏一个新的String对象Q而是直接把s1赋值给了s2Q即把s1的引用赋值给了s2Q所以s2所引用的对象其实就是s1所引用的对象。所以通过"=="来比较时Q返回true。既然它们引用的都是同一个对象,那么通过equals()Ҏ(gu)来比较时Q肯定也q回trueQ这里equals()Ҏ(gu)其实在对同一个对象进行比较,自己肯定{于自己咯?/p>

说到此,其实应该没什么大问题Q因些都是标准的创徏对象的动作,但是String对象q有另一U用方法,也就是开头所提到的可以作Z个基本类型来使用Q请看以下代码段Q?/p>

String s = "Hello";

看到q里Q相信一些初学的朋友或者对String对象q没搞清楚的朋友开始疑惑了Q你肯定会问Q这个用方法在其内部到底发生了什么?其实q就是String对象Ҏ(gu)h的关键!

其实在启动程序时Q虚拟机会创Z块String对象的String~冲池。当String对象作ؓ一个基本类型来使用Ӟ比如QString s = "Hello";Q虚拟机会先在这个String~冲池内L是否有相同值的String对象存在Q如果存在,则把q个String对象的引用赋值给s。如果不存在Q虚拟机会先在这个String~冲池内创徏此String对象Q然后把引用赋值给s?/p>

说到q里Q相信大家已l开始明白了。那么请看下面的代码D:

String s1 = "Hello";
String s2 = "Hello";

System.out.println(s1 == s2);
System.out.println(s1.equals(s2));

以上代码D늚打印l果是:

true
true

Z么这个结果?那么来分析一下。首先这两个String对象都是作ؓ一个基本类型来使用的,而不是通过new关键字来创徏的,因此虚拟Z会ؓq两个String对象分配新的内存堆,而是到String~冲池中来寻找?/p>

首先为s1LString~冲池内是否有与"Hello"相同值的String对象存在Q此时String~冲池内是空的,没有相同值的String对象存在Q所以虚拟机会在String~冲池内创徏此String对象Q其动作是new String("Hello");。然后把此String对象的引用赋值给s1?/p>

接着为s2LString~冲池内是否有与"Hello"相同值的String对象存在Q此时虚拟机扑ֈ了一个与其相同值的String对象Q这个String对象其实是为s1所创徏的String对象。既然找C一个相同值的对象Q那么虚拟机׃在ؓ此创Z个新的String对象Q而是直接把存在的String对象的引用赋值给s2?/p>

q里既然s1和s2所引用的是同一个String对象Q即自己{于自己Q所以以上两U比较方法都q回ture?/p>

到这里,对String对象的基本概念应该都已经理解了。现在我来小l一下:

针对String作ؓ一个基本类型来使用Q?/p>

1。如果String作ؓ一个基本类型来使用Q那么我们视此String对象是String~冲池所拥有的?br />2。如果String作ؓ一个基本类型来使用Qƈ且此时String~冲池内不存在与其指定值相同的String对象Q那么此时虚拟机ؓ此创建新的String对象Qƈ存放在String~冲池内?br />3。如果String作ؓ一个基本类型来使用Qƈ且此时String~冲池内存在与其指定值相同的String对象Q那么此时虚拟机不为此创徏新的String对象Q而直接返回已存在的String对象的引用?/p>

针对String作ؓ一个对象来使用Q?/p>

1。如果String作ؓ一个对象来使用Q那么虚拟机ؓ此创Z个新的String对象Q即为此对象分配一块新的内存堆Qƈ且它q不是String~冲池所拥有的,卛_是独立的?/p>

理解了以上内容后Q请看以下代码段Q?/p>

String s1 = "Hello";
String s2 = new String("Hello");

System.out.println(s1 == s2);
System.out.println(s1.equals(s2));

以上代码D늚打印l果是:

false
true

Ҏ(gu)上面的小l来q行分析。第一行是把String作ؓ一个基本类型来使用的,因此s1所引用的对象是属于String~冲池内的。ƈ且此时String~冲池内q没有与其值相同的String对象存在Q因此虚拟机会ؓ此创Z个新的String对象Q即new String("Hello");。第二行是把String作ؓ一个对象来使用的,因此s2所引用的对象不属于String~冲池内的,卛_是独立的。通过new关键字,虚拟Z为此创徏一个新的String对象Q即为它分配了一块新的内存堆。因?=="比较后的l果是falseQ因为s1和s2所引用的ƈ不是同一个对象,它们是独立存在的。而equals()Ҏ(gu)所q回的是trueQ因两个对象所装的字W串内容是完全相同的?/p>

现在Q相信大家已l完全搞清楚String对象是怎么一回事了:Q但是到此ƈ没有l束Q因为String对象q有更深层次的应用?/p>

q里我将分析一下String对象的intern()Ҏ(gu)的应用?br />intern()Ҏ(gu)返回一个字W串对象的规范表C法Q即一个同该字W串内容相同的字W串Q但是来自于唯一字符串的String~冲池。这听v来有Ҏ(gu)口,其实它的机制有如以下代码D:

String s = new String("Hello");
s = s.intern();

以上代码D늚功能实现可以单的看成如下代码D:

String s = "Hello";

你一定又开始疑惑了Q那么你可以先看W二个代码段。第二个代码D늚意思就是从String~冲池内取出一个与其值相同的String对象的引用赋值给s。如果String~冲池内没有与其相同值的String对象存在Q则在其内ؓ此创Z个新的String对象。那么第一D代码的意思又是什么呢Q我们知道通过new关键字所创徏出的对象Q虚拟机会ؓ它分配一块新的内存堆。如果^凡地创徏相同内容的对象,虚拟机同样会为此分配许多新的内存堆,虽然它们的内Ҏ(gu)完全相同的。拿String对象来说Q如果连l创?0个相同内容的String对象(new String("Hello"))Q那么虚拟机ؓ此分?0块独立的内存堆。假设所创徏的String对象的字W串内容十分大,假设一个Stirng对象装?M大小的字W串内容Q那么如果我们创?0个此相同String对象的话Q我们将会毫无意义的费9M的内存空间。我们知道String是finalc,它所装的是字符串常量,因此String对象在创建后其内?字符?g能改变,也因此String对象可以被共享。所以对于刚才提到的假设Q我们所创徏?0个相同内容的String对象Q其实我们只需为此创徏一个String对象Q然后被其它String变量所׃n。要实现q种机制Q唯一的、简单的Ҏ(gu)是使用String~冲池,因ؓString~冲池内不会存在相同内容的String对象。而intern()Ҏ(gu)是使用q种机制的途径。在一个已实例化的String对象上调用intern()Ҏ(gu)后,虚拟Z在String~冲池内L与此Stirng对象所装的字W串内容相同值的String对象Q然后把引用赋值给引用原来的那个String对象的Stringcd变量。如果String~冲池内没有与此String对象所装的字W串内容相同值的String对象存在Q那么虚拟机会ؓ此创Z个新的String对象Qƈ把其引用赋值给引用原来的那个String对象的Stringcd变量。这样就辑ֈ了共享同一个String对象的目的,而原先那个通过new关键字所创徏出的String对象被抛弃q被垃圾回收器回收掉。这样不但降低了内存的用消耗,提高了性能Q而且在String对象的比较上也同h方便了,因ؓ相同的String对象被׃nQ所以要判断两个String对象是否相同Q则只需要?=="来比较,而无需再用equals()Ҏ(gu)来比较,q样不但使用h更方便,而且也提高了性能Q因为String对象的equals()Ҏ(gu)会对字W串内容拆解Q然后逐个q行比较Q如果字W串内容十分大的话,那么q个比较动作则大大降低了性能?/p>

说到此,大家可能对具体应用还有点模糊Q那么我来D个简单的CZQ以侉KqC上概念:

假设有一个类Q它有一个接收消息的Ҏ(gu)Q这个方法记录用户传来的消息(假设消息内容可能较大Qƈ且重复率较高)Qƈ且把消息按接攉序记录在一个列表中。我x些朋友会q样设计Q?/p>

import java.util.*;

public class Messages {

ArrayList messages = new ArrayList();

public void record(String msg) {
messages.add(msg);
}

public List getMessages() {
return messages;
}
}

q种设计Ҏ(gu)好吗Q假设我们重复的发送给record()Ҏ(gu)同一个消?消息来自不同的用P所以可以视每个消息Z个new String("..."))Qƈ且消息内容较大,那么q个设计会大大费内存I间Q因为消息列表中记录的都是新创徏的、独立的String对象Q虽然它们的内容都相同。那么怎么样可以对其进行优化呢Q其实很单,L(fng)如下优化后的CZQ?/p>

import java.util.*;

public class Messages {

ArrayList messages = new ArrayList();

public void record(String msg) {
messages.add(msg.intern());
}

public List getMessages() {
return messages;
}
}

正如你所看到的,原先record()Ҏ(gu)中的messages.add(msg);代码D变成了messages.add(msg.intern());Q仅仅对msg参数调用了intern()Ҏ(gu)Q这样将寚w复的消息q行׃n机制Q从而降低了内存消耗,提高了性能?/p>

q个例子的确有点牵强Q但是这里只是ؓ了阐qC上概念!

xQString对象的迷N被消除了Q大家只要牢记这些概念,以后再复杂的String应用都可以徏立在此基上来q行分析?



]]>
վ֩ģ壺 ɳ| | ˫| | | | ɽ| | ¡| ͼƬ| | | Դ| ʯ| ¦| | | ٹ| ޼| | ĵ| | | | | | | | | ̳| Ϫ| | | | | | | | | ͺ| Ϸ|