java String之我见

一、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之后,那么子类就无法重写这个类里面所有的方法,继然重写不了,也就谈不上继承了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值