1、String类有哪些特点?
字符串常量就是String类的匿名对象,一旦字符串定义则不可改变。
String类对象可以使用直接赋值或者是构造方法实例化,前者可以自动入池,又不产生垃圾空间。
在实际的开发之中,肯定都要求使用到String类,可是String类有一个天生的短板,不可改变。如果需要经常修改的环境下只能够使用StringBuffer类。
在String类中可以使用“+”来实现字符串的连接操作,而在StringBuffer类中可以使用append()方法实现“+”的功能,此方法定义如下:
public StringBuffer append(数据类型 变量)
范例:
package com.lohas.demo.StringBufferBuilderDemo;
public class StringBufferDemo {
public static voidmain(String[] args) {
StringBufferstringBuffer = new StringBuffer();
stringBuffer.append("Hello ").append("World !");// 连接字符串
fun(stringBuffer);//修改字符串的内容
System.out.println(stringBuffer);
}
public static voidfun(StringBuffer stringBuffer){//引用传递
stringBuffer.append("\n Hi,Lohas");
}
}
此时的执行结果之中发现字符串的内容已经得到了改变,所以StringBuffer适合于修改,而String不适合于修改。
原则:在开发之中95%的情况下使用的都应该是String(String只是不适合于频繁修改),所以不可能通过循环操作String,但是如果真的是进行连接操作,还是建议使用“+”。如果真的是循环修改,肯定使用StringBuffer。
现在字符串类有两个类:String、StringBuffer,那么这两个有什么关系?打开文档观察结构:
String类 |
StringBuffer类 |
public final class String extends Object implements Serializable, Comparable<String>, CharSequence
|
public final class StringBuffer extends Object implements Serializable, CharSequence
|
发现String和StringBuffer类都是CharSequence接口的子类,所以在日后一定要记住,String或StringBuffer都可以向上转型为CharSequence接口实例化。
|
|
|
但是现在出现了一个问题,String与StringBuffer类的对象该如何互相转换呢?对于这两个类对象的互相转换,就可以利用以下原则完成:
1、String转换为StringBuffer
这种转换有两种操作途径:
利用StringBuffer类的构造方法:public StringBuffer(String str)
StringBuffer类存在有append()方法: public StringBuffer append(String str)
2、StringBuffer转换为String
所以类都存在有toString()方法,利用此方法可以将StringBuffer内容变为String内容。
利用“+”实现所有数据类型向String的转换。
虽然在开发之中,要进行字符串的操作都是以String类为主,可是你永远不要忽略一点为,StringBuffer有一些好的操作方法,方便用户开发代码。
在指定位置追加新的内容,方法:
public StringBuffer insert(int offset, 数据类型d)
反转,方法:public StringBuffer reverse()
删除指定范围的数据,方法:
public StringBuffer delete(int start,int end)
以上的三个操作方法是掌握StringBuffer类的主要操作。
StringBuffer类是在JDK1.0的时候提供的,而在JDK1.5之后又提供有一个StringBuilder。StringBuffer属于线程安全的操作,
但是性能不高,而StringBuilder属于非线程安全的操作,性能高。
|
StringBuffer |
StringBuilder |
JDK |
1.0 |
1.5 |
方法 |
有synchronized |
无 |
线程 |
线程安全 |
非线程安全 |
请解释String、StringBuffer、StringBuilder类的区别
String类的内容一旦声明则不可改变,而StringBuffer、StringBuilder的内容可以改变。
String、StringBuffer、StringBuilder都是CharSequence接口的子类。
StringBuffer是从JDK1.0时提供的,属于线程安全的操作,性能不高,而StringBuilder是从JDK1.5时提供的,属于非线程安全操作,性能更高。
(一般来说,新类的提供的功能和旧类的功能一样,会把旧的类设置成线程安全的)
字符串的操作首选的一定是String类,可改变的时候再选择StringBuffer、StringBuilder,多个线程访问同一资源时,必须使用StringBuffer。