java String的小结

1.java.lang.String类是final类型的,所以不能继承这个类,也不能修改这个类。

2.String s = “test”;

   s += “temp”;

 当执行上述两行代码之后,原始的String对象中的内容是否发送了变化?

1)当执行上述两行代码之后,原始的String对象中的内容没有发送变化。因为String被设计成不可变类,所有它的所有对象都是不可变对象。

在上面代码中,s原先执行一个String对象,内容是“test”。接下来对s进行“+”操作,这个时候s不再指向原来那个对象了,而是指向了另外一个String对象,内容为“test temp”。

2)并且原来的那个“test”String对象还存在于内存之中,只是s这个引用变量不再执行它了。

3)如果经常对字符串进行各种修改,或者不可预见的修改,那么使用String来代码字符串的话会引起很大的内存开销。

   a、  因为String对象创建之后不能再改变,所以对每一个不同的字符串,都需要一个String对象来表示。

   b、这时,应该考虑使用StringBuffer类,StringBuff类允许修改,而不是为每个不同的字符串都要生成一个新的对象。

   c、String类对象和StringBuffer类对象转换起来十分容易。

 

3. 如果要使用内容相同的字符串,不必每次都new一个String对象。

 1)例如我们要在构造器中对一个名叫 s 的 String 引用变量进行初始化,把它设置为初始值,应当这样做:
public class Demo {
private String s;
...
public Demo {
s = "Initial Value";
}
...
}
而非
s = new String("Initial Value");

2)后者每次都会调用构造器,生成新对象,性能低下且内存开销大,并且没有意义,因为 String对象不可改变,所以对于内容相同的字符串,只要一个 String 对象来表示就可以了。也就说,多次调用上面的构造器创建多个对象,他们的 String 类型属性 s 都指向同一个对象。

3)对于字符串常量,如果内容相同,Java 认为它们代表同一个 String 对象。而用关键字 new 调用构造器,总是会创建一个新的对象,无论内容是否相同。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值