JAVA网页编程之周全了解Java中的String数据范例
还是要自己一点一点写代码,然后编译,改错再编译好那。还有最重要的是.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上运行,这一点对我触动很大,而且引发了我许多感叹,所以想写出来分享一下。 是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言 接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。 另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。 至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。 你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。 另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。 是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言 吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧 那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
页:
[1]