目录
1 String StringBuffer 和 StringBuilder 的区别是什么?
2 创建字符串
3 连接字符串
4 String str=”aaa”,与String str=new String(“aaa”)一样吗?
5 String str=”aa”,String s=”bb”,String aa=aa+s;一种创建了几个对象?
1 String StringBuffer 和 StringBuilder 的区别是什么?
String是只读字符串,它并不是基本数据类型,而是一个对象。从底层源码来看是一个final类型的字符数组,所引用的字符串不能被改变,一经定义,无法再增删改。每次对String的操作都会生成新的String对象.
每次+操作 :隐式在堆上new了一个跟原字符串相同的StringBuilder对象,再调用append方法 拼接+后面的字符。
StringBuffer与StringBuilder都继承了AbstractStringBqaulder类,而AbtractStringBuilder又实现了CharSequence接口,两个类都是用来进行字符串操作的。
在做字符串拼接修改删除替换时,效率比string更高。
StringBuffer是线程安全的,Stringbuilder是非线程安全的。所以Stringbuilder比stringbuffer效率更高,StringBuffer的方法大多都加了synchronized关键字
2 创建字符串
字符串广泛应用在 Java 编程中,在 Java 中,字符串是表示字符序列的对象。
Java 提供了 String 类来创建和操作字符串。
创建字符串最简单的方式如下:
String s = "Hello zgl!";
在代码中每遇到一个字符串时,编译器会在这种情况下创建一个String对象,如:"Hello W3Cschool!"。
“+”运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然后再进行连接。
3 连接字符串
在 Java 中,使用 '+' 操作符来连接字符串。
下面是一个例子:
int a=12;
System.out.println("a="+a);//输出结果: a=12
运行效果:
4 String str=”aaa”,与String str=new String(“aaa”)一样吗?
不一样,因为内存的分配方式不一样。String str="aaa"的方式,Java 虚拟机会将其分配到常量池中;而 String str=new String(“aaa”) 则会被分到堆内存中。
5 String str=”aa”,String s=”bb”,String aa=aa+s;一种创建了几个对象?
一共有两个引用,三个对象。因为”aa”与”bb”都是常量,常量的值不能改变,当执行字符串拼接时候,会创建一个新的常量是” aabbb”,有将其存到常量池中。
6 String文件类型判断
package test.string;
import java.util.Arrays;
import java.util.List;
public class GetFileType {
private static List<String> accTypes = Arrays.asList("jpg","bmp","gif","doc","docx","rar");
public static void main(String[] args){
for(String arg:args){
String type = getFileType(arg);
if(accTypes.contains(type)){
System.out.println(arg+"后缀合法");
}else{
System.out.println(arg+"后缀不合法");
}
}
}
/**
* 获取文件后缀名
* @param filename
* @return
*/
public static String getFileType(String filename){
int pos = filename.lastIndexOf(".");
if(pos == -1){
return null;
}
return filename.substring(pos+1);
}
}