|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
还是要自己一点一点写代码,然后编译,改错再编译好那。还有最重要的是.net的编译环境非常好,你甚是不需要了解太多工具,对于简单的系统,你可以之了解一些语法就哦了。数据|数据范例 1.起首String不属于8种基础数据范例,String是一个对象。
由于对象的默许值是null,以是String的默许值也是null;但它又是一种特别的对象,有别的对象没有的一些特征。
2.newString()和newString(“”)都是声名一个新的空字符串,是空串不是null;
3.Stringstr=”kvill”;
Stringstr=newString(“kvill”);的区分:
在这里,我们不谈堆,也不谈栈,只先复杂引进常量池这个复杂的观点。
常量池(constantpool)指的是在编译期被断定,并被保留在已编译的.class文件中的一些数据。它包含了关于类、办法、接口等中的常量,也包含字符串常量。
看例1:
Strings0=”kvill”;
Strings1=”kvill”;
Strings2=”kv”+“ill”;
System.out.println(s0==s1);
System.out.println(s0==s2);
了局为:
true
true
起首,我们要晓得Java会确保一个字符串常量只要一个拷贝。
由于例子中的s0和s1中的”kvill”都是字符串常量,它们在编译期就被断定了,以是s0==s1为true;而”kv”和”ill”也都是字符串常量,当一个字符串由多个字符串常量毗连而成时,它本人一定也是字符串常量,以是s2也一样在编译期就被剖析为一个字符串常量,以是s2也是常量池中”kvill”的一个援用。
以是我们得出s0==s1==s2;
用newString()创立的字符串不是常量,不克不及在编译期就断定,以是newString()创立的字符串不放进常量池中,它们有本人的地点空间。
看例2:
Strings0=”kvill”;
Strings1=newString(”kvill”);
Strings2=”kv”+newString(“ill”);
System.out.println(s0==s1);
System.out.println(s0==s2);
System.out.println(s1==s2);
了局为:
false
false
false
例2中s0仍是常量池中”kvill”的使用,s1由于没法在编译期断定,以是是运转时创立的新对象”kvill”的援用,s2由于有后半部分newString(“ill”)以是也没法在编译期断定,以是也是一个新创立对象”kvill”的使用;分明了这些也就晓得为什么得出此了局了。
4.String.intern():
再增补先容一点:存在于.class文件中的常量池,在运转期被JVM装载,而且能够扩大。String的intern()办法就是扩大常量池的一个办法;当一个String实例str挪用intern()办法时,Java查找常量池中是不是有不异Unicode的字符串常量,假如有,则前往其的援用,假如没有,则在常量池中增添一个Unicode即是str的字符串并前往它的援用;看例3就分明了
例3:
Strings0=“kvill”;
Strings1=newString(”kvill”);
Strings2=newString(“kvill”);
System.out.println(s0==s1);
System.out.println(“**********”);
s1.intern();
s2=s2.intern();//把常量池中“kvill”的援用赋给s2
System.out.println(s0==s1);
System.out.println(s0==s1.intern());
System.out.println(s0==s2);
了局为:
false
**********
false//固然实行了s1.intern(),但它的前往值没有赋给s1
true//申明s1.intern()前往的是常量池中”kvill”的援用
true
最初我再废除一个毛病的了解:
有人说,“利用String.intern()办法则能够将一个String类的保留到一个全局String表中,假如具有不异值的Unicode字符串已在这个表中,那末该办法前往表中已有字符串的地点,假如在表中没有不异值的字符串,则将本人的地点注册到表中“假如我把他说的这个全局的String表了解为常量池的话,他的最初一句话,“假如在表中没有不异值的字符串,则将本人的地点注册到表中”是错的:
看例4:
Strings1=newString("kvill");
Strings2=s1.intern();
System.out.println(s1==s1.intern());
System.out.println(s1+""+s2);
System.out.println(s2==s1.intern());
了局:
false
kvillkvill
true
在这个类中我们没有申明一个”kvill”常量,以是常量池中一入手下手是没有”kvill”的,当我们挪用s1.intern()后就在常量池中新增加了一个”kvill”常量,本来的不在常量池中的”kvill”仍旧存在,也就不是“将本人的地点注册到常量池中”了。
s1==s1.intern()为false申明本来的“kvill”仍旧存在;
s2如今为常量池中“kvill”的地点,以是有s2==s1.intern()为true。
5.关于equals()和==:
这个关于String复杂来讲就是对照两字符串的Unicode序列是不是相称,假如相称前往true;而==是对照两字符串的地点是不是不异,也就是是不是是统一个字符串的援用。
6.关于String是不成变的
这一说又要说良多,人人只需晓得String的实例一旦天生就不会再改动了,好比说:Stringstr=”kv”+”ill”+”“+”ans”;
就是有4个字符串常量,起首”kv”和”ill”天生了”kvill”存在内存中,然后”kvill”又和”“天生”kvill“存在内存中,最初又和天生了”kvillans”;并把这个字符串的地点赋给了str,就是由于String的“不成变”发生了良多一时变量,这也就是为何倡议用StringBuffer的缘故原由了,由于StringBuffer是可改动的
前些天,在CSDN上看到了一个消息,说是ASP.NETAJAX成功在Linux上运行,这一点对我触动很大,而且引发了我许多感叹,所以想写出来分享一下。 |
|