易截截图软件、单文件、免安装、纯绿色、仅160KB

对java技术String的探讨

要理解 java中String的运作方式,必须明确一点:String是一个非可变类(immutable)。什么是非可变类呢?简单说来,非可变类的实例是不能被修改的,每个实例中包含的信息都必须在该实例创建的时候就提供出来,并且在对象的整个生存周期内固定不变。java为什么要把String设计为非可变类呢?你可以问问 james Gosling :)。但是非可变类确实有着自身的优势,如状态单一,对象简单,便于维护。其次,该类对象对象本质上是线程安全的,不要求同步。此外用户可以共享非可变对象,甚至可以共享它们的内部信息。(详见 《Effective java》item 13)。String类在java中被大量运用,甚至在class文件中都有其身影,因此将其设计为简单轻便的非可变类是比较合适的。
一、创建。
    好了,知道String是非可变类以后,我们可以进一步了解String的构造方式了。创建一个Stirng对象,主要就有以下两种方式:
java 代码
String str1 = new String("abc");    
Stirng str2 = "abc";  
     虽然两个语句都是返回一个String对象的引用,但是jvm对两者的处理方式是不一样的。对于第一种,jvm会马上在heap中创建一个String对象,然后将该对象的引用返回给用户。对于第二种,jvm首先会在内部维护的strings pool中通过String的 equels 方法查找是对象池中是否存放有该String对象,如果有,则返回已有的String对象给用户,而不会在heap中重新创建一个新的String对象;如果对象池中没有该String对象,jvm则在heap中创建新的String对象,将其引用返回给用户,同时将该引用添加至strings pool中。注意:使用第一种方法创建对象时,jvm是不会主动把该对象放到strings pool里面的,除非程序调用 String的intern方法。看下面的例子:
java 代码
String str1 = new String("abc"); //jvm 在堆上创建一个String对象   
  
 //jvm 在strings pool中找不到值为“abc”的字符串,因此   
 //在堆上创建一个String对象,并将该对象的引用加入至strings pool中   
 //此时堆上有两个String对象   
Stirng str2 = "abc";   
  
 if(str1 == str2){   
 &nb


相关文档:

Java线程:线程的同步与锁

一、同步问题提出
 
线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏。
例如:两个线程ThreadA、ThreadB都操作同一个对象Foo对象,并修改Foo对象上的数据。
 
public
class
Foo {
    private
int
x = 100;
    public
int
get ......

Java线程:线程的调度 优先级

与线程休眠类似,线程的优先级仍然无法保障线程的执行次序。只不过,优先级高的线程获取CPU资源的概率较大,优先级低的并非没机会执行。
 
线程的优先级用1-10之间的整数表示,数值越大优先级越高,默认的优先级为5。
 
在一个线程中开启另外一个新线程,则新开线程称为该线程的子线程,子线程初始优先级与父 ......

Java Web基础:客户端验证

本文转载自李绪成老师的笔记,感谢李老师!
Web应用中必须在客户端对输入信息进行验证,如果发现错误可以及时对用户进行反馈,也不用等到服务器发现之后再反馈,一方面是减少了用户的等待时间,另一方面减少不必要的交互过程。本节内容介绍如何使用JavaScript完成客户端的验证。
JavaScript语言
在Web应用中需要在客户端 ......

Java与C++的区别

Java与C++最大的不同的,Java完全是面向对象的,是由类构成的,而C++是由对象与过程组成。
1、路径:
Java包括一个包package,C++没有;
2、引入类
java import.*.*; C++  include ""';
3、预定义,
C++包括预定义,Java不包括
4、结构
C++包括结构,Java只包括类,结构体可以转化为类。
5、类名与文件名
Jav ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号