java string之我见...
时间:2010-08-13 来源:xiogjie_67
一、java中的String类为什么不可以被改变?
public class StringTest {
public static void main(String[] args) {
String str = new String ("abcdef");
str.replace('c', 'C');
System.out.println(str);
}
}
这里面的代码,试图将字符串中的字符'c'替换成大写字母'C',使用的是String类的replace方法,调用这个方法之后,再重新输出字符串str,发现并没有改变str的值。这是怎么一回事呢?
大家只要查看一下String的API就知道,这个类的replace()方法,它返回的是一个新的String,也就是说,调用String的replace()方法之后,它会在内存堆中新创建一个String对象,而不会去改变之前在堆中创建的String对象。
总之,大家可以查看String的API,只要是试图改变一个字符串的方法,它最终都会返回一个新的String,也就是说在内存堆中开辟一个新的空间来存放这个新的字符串。这也就是不能改变原String对象的值的根本原因。也就是说,无论你调用String的什么方法,改变原String对象的值,它都会产生一个新的字符串返回。
二、java中的String类为什么是不可以继承的?
查看jdk你就可以清楚的看到String是final类型的,表明它是一个终态类,大家都清楚final作用在类上,就表示这个类是不能够被子类继承的。下方是String类的类定义:
public final class String
extends Object implements java.io.Serializable, Comparable<String>, CharSequence 为什么final作用在类上面,这个类就不能够被子类继承,也就是被子类扩展呢? 因为类上面如果添加了final修饰,则这个类里面的方法就默认会加上final修饰符,我们知道,final作用在方法上面的时候,在子类中是无法重写这个方法的。所以,如果类里面所有的方法都加上final之后,那么子类就无法重写这个类里面所有的方法,继然重写不了,也就谈不上继承了。