1.String实现了Serializable接口,说明String可以串行化,所以其可以在网络上传输
2.String实现了Comparable接口,说明String对象可以进行比较
3.String类是final类,不能被其他类继承,代表不可变的字符序列,
字符串是不可变的。
String a = "hello"
a = "haha"
以上代码中,第一行a指向了jvm常量池中的“hello”字符串的地址,第二行a指向了jvm常量池中的“haha”字符串的地址,所以,字符串a看似改变了,实际上此时了a已经另一个新的对象了。
String, Stringbuffer, StringBuilder类
有源码分析,StringBuilder和StringBuffer的值是存放在堆中的(可看成是引用类型),而不是存放在常量池中,
1.StringBuilder和StringBuffer非常类似,均代表可变的字符序列,而且方法也一样
2.String:不可变字符序列,效率低,但是复用率高
3.StringBuffer:可变字符序列,效率较高(增删)、线程安全(方法中都是用了synchronized 关键字)
4.StringBuilder:可变字符序列,效率最高,线程不安全
5.String使用注意说明:
String s = "a";//创建了一个字符串
s+="b";//实际上原来的“a"字符串对象已经丢弃了,现在又产生了一个字符串s+"b"(也就是”ab")。如果多次执行这些改变字符串内容的操作,会导致大量副本字符串对象留存在内存中,降低效率。如果这样的操作放到循环中,会极大影响程序的性能=>结论:如果我们对String做大量修改,不要使用String