java初学者必须理解这几个问题(2)
public class Demo {
private String s;
…
public Demo {
s = "Initial Value";
}
…
}
而非
s = new String("Initial Value");
后者每次都会调用结构器,生成新方针,功能低下且内存开支大,而且没有意义,由于String方针不行改动,所以关于内容一样的字符串,只需一个String方针来表明就能够了。也就说,屡次调用上面的结构器创立多个方针,他们的String类型特点s都指向同一个方针。
上面的定论还根据这样一个现实:关于字符串常量,若是内容一样,广州Java培训以为它们代表同一个String方针。而用关键词new调用结构器,总是会创立一个新的方针,无论内容能否一样。
至于为什么要把String类描绘成不行变类,是它的用处决议的。其实不只 String,许多Java规范类库中的类都是不行变的。在开发一个体系的时分,咱们有时分也需求描绘不行变类,来传递一组关联的值,这也是面向方针思维的表现。不行变类有一些长处,比方由于它的方针是只读的,所以多线程并发拜访也不会有任何问题。当然也有一些缺陷,比方每个不一样的状况都要一个方针来代表,能够会形成功能上的问题。所以Java规范类库还供给了一个可变版别,即StringBuffer。